具有回调行为的jQuery .attr()

用户名

正在浏览jQuery文档并发现了一些我不太了解的东西))在页面上说,我有一个像这样的列表:

<ul id='list0'>
    <li>list item 1<b></b></li>
    <li>list item 2<b></b></li>
    <li>list item 3<b></b></li>
    <li>list item 4<b></b></li>
</ul>

当我运行这段代码

$('#list0 li').attr('id', function(i) {
    return (i + 1) % 2 ? 'odd' : 'even';
}).each(function() {
    $('b', this).text(' -> ' + this.id);
});

我得到的输出

  • 列表项1- >奇数
  • 清单2- >偶数
  • 清单3- >奇数
  • 列出项目4- >偶数

一切正常,并且每个<li>内部<ul>得到一个id的奇数或偶数。当我使用each()到组里面的内容<b>我可以得到id<li>使用this.id

问题是,当我使用其他<li>属性而不是id时,为什么这不起作用

$('#list0 li').attr('foo', function(i) {
    return (i + 1) % 2 ? 'odd' : 'even';
}).each(function() {
    $('b', this).text(' -> ' + this.foo);
}); 

结果是

  • 列表项1- >未定义
  • 清单2- >未定义
  • 清单3- >未定义
  • 清单4- >未定义

即使FOO的每个属性<li>仍设置于偶数或奇数不知何故这个时候我不能让的内部each()this.foo

我使用jQuery 1.10.2。

谢谢你。

本杰明·格伦鲍姆(Benjamin Gruenbaum)

这里有两件事要注意:

首先,ids是唯一的,实际上,您最多只能有一个具有给定id的元素。因此,您的第一个代码示例是您不应执行的操作。

元素没有foo 属性,您需要使用this.getAttribute("foo")来访问它$(this).attr("foo")

所以:

('#list0 li').attr('foo', function(i) {
    return (i + 1) % 2 ? 'odd' : 'even';
}).each(function() {
    $('b', this).text(' -> ' + this.getAttribute('foo'));
}); 

附带说明-list0, list1由于事实证明您可能不应该有顺序列表ID之类的,以此类推。您还应该考虑将任意数据存储在JavaScript对象中,而不是存储在DOM上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章