这个方法的核心是动态地为多个元素设置属性值。函数会对每个匹配的元素都执行一次,并根据元素的某些特征(如索引、原有属性值等)来计算出新的属性值。
示例一:为图片添加描述性标题
假设页面上有三张图片,它们的 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) 方法的特点 - 它使用函数的返回值作为新的属性值,完全替换原有值,而不是在原有值基础上追加内容。