JQuery div 上的 attr() 未返回值

JQuery attr() on div not returning value

我正在使用一个用 Coffeescript 编写的 Backbone 应用程序。我正在尝试访问与 div 列表中每个 div 关联的 cid。每个 div 具有相同的 'contact' class 和 cid 以及关联的整数值。

<div class="contact-list">
  <div class="contact" cid="1"></div>
  <div class="contact" cid="2"></div>
  <div class="contact" cid="3"></div>
  <div class="contact" cid="4"></div>
  <div class="contact" cid="5"></div>
</div>

我要查找cid为4的元素:

console.log "ALL", $('.contact')

for div in $('.contact') 
  console.log div
  console.log div.attr('cid')

循环似乎在调用 .attr() 时中断。 (当我注释掉该行时,代码打印所有 5 个 div。否则它只打印第一个)这表明我一定是调用了 .attr() 不正确?

当遍历 jQuery 对象时,元素引用将引用 DOM 元素而不是 jQuery 对象,因此您不能直接访问 jQuery 方法在上面

console.log "ALL", $('.contact')

for div in $('.contact') 
  console.log $(div)
  console.log $(div).attr('cid')

使用.each()喜欢

console.log "ALL", $('.contact')

$('.contact').each (i, div) ->
  console.log div
  console.log $(div).attr('cid')

演示:Fiddle

您需要再次 运行 div through sizzle ,因为 attr 对非 jquery 对象不起作用。 $(div).attr().应该可以。

为什么不用数据...jquery

你可以放值

$div.data("cid", "test" );

你可以读取值

$div.data("cid")