如何使用JavaScript更改<a>标签中的标题属性?

13

我有一个HTML标签,一开始我想把"Title"属性中的文本作为提示框名称。在我点击链接后,我想要不同的提示框名称。我已经使用了下面的代码,但它没有起作用。请问有人可以帮忙吗?

<html>
<head>
<script>

function tool(){
document.getElementsByName(link).title = "after click";
}

</script>
</head>
<body>
    <a href="javascript:tool()" name ="link" title="before click">click here</a>
</body>
</html>
12个回答

23

我假设这只是你想要做的简化示例,因为更改链接的 onclick 可以在行内完成:

 <a href="#" onclick="this.title='after click'" title="before click">...</a>

无论如何,最好的方法是避免进行任何查找。只需将链接的引用作为参数传递给函数:

<script>
  function tool(link) {
    link.title = 'after click';
  }
</script>
<a href="#" onclick="tool(this)" title="before click">...</a>

自然地,正如 Grant 所建议的那样,你也可以将标题值传递给函数,但这样你最好一路使用内联版本并跳过该函数。


1
+1. 我会让解决方案更加通用,使用以下代码:function tool(link, text) { link.title = text; } 和 <a href="#" onclick="tool(this, 'after click')" title="before click">...</a>。但是对于一次性的情况,现有的答案也可以。 - Grant Wagner

13

去掉SCRIPT元素内的BR标签,并重写工具函数为:

function tool(){
    document.getElementsByName("link")[0].title = "after click";
}

使用这种方法可以使其工作。然而,这不是最优的方式。如果您将id参数分配给字段,您至少可以使用document.getElementById(..),甚至更好的是使用像jQuery这样的库。


1
显示错误:'document.getElementsByName("link").0' 为空或不是对象... - raja
请注意0的使用方式。getElementsByName("link")[0]是访问位置0处元素的正确方法。 getElementsByName("link").0将尝试访问不存在的属性,因此会引发异常。 - Sean
不要使用 getElementsByName,当你想要做的是 getElementById 时。正如你所看到的,它只会让问题变得更糟。 - Jason Kester
-1. levik的答案(https://dev59.com/PnNA5IYBdhLWcg3wmfK5#898003)在这里是更好的解决方案。他可以将该函数添加到任意数量的链接中,并控制每个链接的标题文本。 - Grant Wagner
这个可以,你也可以使用ID像这样 document.getElementById('这里输入ID').title = "点击后"; - JOB
显示剩余2条评论

6
使用jQuery,您可以编写以下命令:
$("a#link").attr("title","after click");

1
他没有使用jQuery,而是使用了纯粹的DOM操作。为什么这样做任何人都猜不到。 - Justin Poliey
我使用了你的代码,但它报错“对象未定义”。现在该怎么办? - raja
6
为什么要加入jQuery,让事情变得复杂?这只是一些简单的DHTML。 - Jason Kester

3
您可以在要更改的元素上使用setAttribute(attributeName,value)。
document.getElementById('link').setAttribute('title', 'after click');

这也适用于自定义属性。

这显示错误“对象不支持此属性或方法” - raja
getElementsByName返回一个NodeList,你必须指定要使用的元素,例如:getElementsByName(link)[某个数字].setAttribute([...]). - cic
1
我的错误。我以为你是按id选择的。我已经更新了代码。 - Sean

1

更正为Jason代码:

使用document.getElementById("link").title代替document.getElementsByName("link").title。

我在IE7和Firefox 3上进行了测试。

<html>
<head>
    <script>
            function tool(){
                    document.getElementById("link").title = "after click";
            }
    </script>
</head>
<body>
    <a href="javascript:tool()" id="link" title="before click">
            click here
    </a>
</body>
</html> 

您还可以探索这篇使用JavaScript创建漂亮工具提示的文章:http://devirtu.com/2008/08/14/how-to-make-tooltip-with-javascript/


谢谢。我猜这就是 OP 代码中的三个问题了。我已经更正了我的输入。 - Jason Kester

1
document.getElementsByName("link").title = "after click";

你只需要集合中的第一个项目。请参考@Waxwing的答案。 - Cerebrus
你也可以使用像 document.getElementById('这里放ID').title = "点击后"; 这样的代码。 - JOB

0
标题已更改,但仅在生成的代码中。这是JS的工作方式-它仅处理表现层。尝试使用Firefox的Webdeveloper工具栏,因为它有显示生成代码和原始代码的选项。如果您需要其他方法,请考虑使用一些服务器端编程。
我的观察:
  • 不要将JS与HTML混合使用。如果您需要更新代码,这样做会更容易 - 搜索“非侵入式JS”以更好地掌握此问题。因此,<a href="javascript:..."><a href="#" onclick="...">是一种不良的编码实践。

  • 不要为简单的任务使用大型JS包,如JQuery。只有在充分利用它们的功能时才能发挥其优势。

  • 您真的需要即时执行HTML操作吗?为什么?标题工具提示对您的代码是否很重要?谁应该从中受益:最终用户还是管理员?无障碍性如何?

  • 第一个代码块的信息:

  • 如果我们不知道要使用哪个链接,我们必须收集所有链接
  • 然后测试集合是否符合onclick事件
  • 建议:
    • 使用更好的事件处理程序 ;)
    • 仅从页面的特定部分(主要或导航div)收集链接以提高速度
  • 注意事项:
  • 这可能会减慢页面呈现速度
  • 标题属性是硬编码的,并且对所有链接都相同


function changeTitle1(){
// find the array of links inside the document
var a = document.getElementsByTagName('a');
// test the array against onclick event
for (var i = 0, j = a.length; i 
  • 关于第二个代码块的信息:
  • 我们知道要检查哪个链接
  • 建议:
    • 使用更好的事件处理程序 ;)
  • 注意事项:
  • 这只能用于单个元素
  • title属性是硬编码的,对所有链接都相同

function changeTitle2(){
// find the link
var a = document.getElementById('action_link');
// onclick event
a.onclick = function() {
try{
// change title value
this.title = 'This unique click happened as well!';
// or use setAttribute() method like this
/* this.setAttribute('title', 'This unique click happened as well!'); */

// disable default link action
return false;
}
// clear memory leaks with try-finally block
finally{a = null;}
}
}


    window.onload = function() {
        changeTitle1();
        //changeTitle2();
    }

@spiro:关于你的第二个问题,关于链接当前状态和更改它们的CSS...好吧,使用CSS :)

简短版:

<style type="text/css" media="screen">
    #home #current-home a,
    #contact #current-contact a,
    #about #current-about a
    {/* declarations to style the current state */}
</style>
</head>
<body id="home"> <!-- OR body id="contact" OR body id="about" -->
    <a href="#" title="Home" class="current-home">Home</a>
    <a href="#" title="Contact" class="current-contact">Contact</a>
    <a href="#" title="About us" class="current-about">About us</a>

长版本:http://www.456bereastreet.com/archive/200503/setting_the_current_menu_state_with_css/ (也要读评论)

注意:如果您已经在当前页面上,是否有必要显示链接


function changeTitle1(){ // 找到链接数组 var a = document.getElementsByTagName('a'); // 测试数组是否符合onclick事件 for (var i = 0, j = a.length; i < j; i++){ try{ // onclick事件 a[i].onclick = function() { // 更改标题值 this.title = '哇,你点击了我!'; // 或者使用setAttribute()方法像这样 /* this.setAttribute('title', '哇,你点击了我!'); */ // 禁用默认链接操作 return false; } } // 使用try-finally块清除内存泄漏 finally{a[i] = null;} } // 结束for循环 } - user219963

0

我会使用http://jquery.com/下载它并添加一个脚本引用

给你的a标签一个id,例如myLink

然后使用JQuery,你可以写

$(document).ready(function () {

    $("#myLink").click(function(){

        $("#myLink").attr("title","after click");

    });

});

1
我无法添加新的库,因为我们公司有一些限制。请告诉我除了JQuery之外的其他选项! - raja

0

正如waxwing所建议的那样,最好使用getElementById()

<a id="aLink" href="http://www.bla.com" title="hello">link</a>
 <script>

function tool(){
document.getElementById('aLink').title = "after click";
}

</script>

0

你提供的代码有两个问题:

  • 如其名称所示,document.getElementById 是通过 ID 查找元素,而不是名称。你需要在锚点标签中提供一个 ID。将你的链接更改为 <a href="javascript:tool()" id="link" name="link" title="before click">点击这里</a>

  • 你正在向 document.getElementById 提供名为“link”的变量内容,这个变量可能不存在。你实际上想要传递一个字面字符串,需要加引号。将该调用更改为 document.getElementById("link").title = "after click";

将所有内容组合起来,你的代码应该如下所示:

<html>
<head>
    <script>
        function tool(){
            document.getElementById("link").title = "after click";
        }
    </script>
</head>
<body>
    <a href="javascript:tool()" id="link" name="link" title="before click">
        click here
    </a>
</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接