您好!欢迎访问家园网-www.jy.wang!

家园网

jQuery的attr(key,fn)意思是为所有匹配元素设置一个函数返回值的属性值,请举例说明

网络 作者:本站 点击:

这个方法的核心是‌动态地‌为多个元素设置属性值。函数会对每个匹配的元素都执行一次,并根据元素的某些特征(如索引、原有属性值等)来计算出新的属性值。

示例一:为图片添加描述性标题

假设页面上有三张图片,它们的 src 属性分别是:

  • "photo1.jpg"

  • "photo2.jpg"

  • "photo3.jpg"

我们想为每张图片的 title 属性设置一个包含其路径的描述。

$("img").attr("title", function(index, oldValue) {
    // 这个函数会为每个<img>元素执行一次
    // index: 当前图片在集合中的索引(0, 1, 2...)
    // oldValue: 该图片title属性原来的值(如果之前没有设置,可能是空字符串)
    // this: 指向当前正在处理的DOM元素(图片元素本身)
    
    return "图片路径: " + this.src; // 使用图片自身的src属性来构建title
});

执行结果:

  • 第一张图片:title="图片路径: photo1.jpg"

  • 第二张图片:title="图片路径: photo2.jpg"

  • 第三张图片:title="图片路径: photo3.jpg"

示例二:根据位置设置不同的ID

假设页面上有一个无序列表,里面有5个 <li> 项:

<ul>
    <li>苹果</li>
    <li>香蕉</li>
    <li>橙子</li>
    <li>葡萄</li>
    <li>西瓜</li>
</ul>

我们想为每个列表项设置一个格式为 "item-序号" 的ID:

$("li").attr("id", function(index) {
    // index从0开始,但我们希望ID从1开始编号
    return "item-" + (index + 1);
});

执行结果:

  • 第一个li:id="item-1"

  • 第二个li:id="item-2"

  • 第三个li:id="item-3"

  • 第四个li:id="item-4"

  • 第五个li:id="item-5"

示例三:基于原有属性值进行修改

假设有些链接已经有 title 属性,我们想在原有基础上添加前缀:

$("a").attr("title", function(index, oldTitle) {
    // oldTitle是该链接原来的title值
    if (oldTitle) {
        return "链接说明: " + oldTitle; // 如果原来有值,就添加前缀
    } else {
        return "这是一个链接"; // 如果原来没有值,就设置默认文本
    }
});

总结特点:

  • 批量处理‌:一次性为所有匹配元素设置属性

  • 动态计算‌:每个元素的属性值都是通过函数实时计算的

  • 个性化‌:可以根据每个元素的不同特征设置不同的属性值

  • 参数丰富‌:函数可以接收索引和原属性值,方便进行条件判断



第一个例子,假设第一张图片原来的oldValue值为美丽的一张图,那么执行后会显示什么


根据您的假设,如果第一张图片原来的 title 属性值(即 oldValue)是 "美丽的一张图",那么在执行示例一的代码后,它的 title 属性值将被更新。

执行代码:

$("img").attr("title", function(index, oldValue) {
    return "图片路径: " + this.src;
});

执行结果:
第一张图片的 title 属性将变为:

"图片路径: photo1.jpg"

解释:

  • 函数中的 return "图片路径: " + this.src; 完全覆盖了原来的 oldValue

  • 原来的值 "美丽的一张图" 不会被保留或拼接

  • 最终显示的是新的固定格式文本加上图片的实际路径

这就是 attr(key, fn) 方法的特点 - 它使用函数的返回值作为新的属性值,完全替换原有值,而不是在原有值基础上追加内容。

标签: