【问题标题】:attr('class') and hasClass() giving conflicting resultsattr('class') 和 hasClass() 给出相互矛盾的结果
【发布时间】:2009-12-09 10:00:07
【问题描述】:

我在 jQuery 中得到了一些令人困惑的结果,包括 attr('class') 和 hasClass()。基本上,我正在遍历表行并确定下一个可见表行是否具有某个类。

$('table#blocks tr.region').each(function () {
    var next_row = $(this).nextAll('tr:visible');
            
    console.log('This: ' + $(this).attr('class') + ' Next: ' + next_row.attr('class') + ' Next is a region: ' + next_row.hasClass('region'));
                     
 });

当我运行这个脚本时,日志显示:

这个:region region-left 下一个:region region-right 下一个是一个区域:true

这个:region region-right 下一个:region region-content 下一个是一个区域:true

这个:region region-content 下一个:draggable even shown_on_home shown_on_infozone 接下来是一个区域:true

这个:region region-header 下一个:region-message region-header-message region-empty 接下来是一个区域:true

这个:region region-footer 下一个:region-message region-footer-message region-empty 接下来是一个区域:true

This: region region--1 Next: undefined Next is a region: false

所以消息清楚地表明有些行具有类“区域”而有些没有,但它们都为 hasClass() 返回 true!

有人能解释一下吗?

谢谢:)

【问题讨论】:

  • 这个玛丽亚有什么进展吗?您为什么不对给出的答案提供反馈?我的回答不适合你吗?

标签: jquery


【解决方案1】:

该错误部分来自您对nextAll() 的使用,它“在当前元素之后查找所有同级元素”。因此,您始终选择当前行之后的所有可见行。

如果您重新阅读有关它们的文档,可以解释从 attr()hasClass() 返回的值之间的差异

属性(名称)

访问属性 第一个匹配的元素。

对比

hasClass(类)

如果指定的类是,则返回 true 至少出现在一组 匹配的元素。

这说明了一切。您使用 nextAll 选择多个兄弟姐妹,attr 仅显示匹配的第一个元素的 class 属性,而 hasClass 如果匹配的所有元素中的一个具有类,则返回 true。

我的建议是使用var next_row = $(this).next('tr:visible');。这只会给你下一个可见的兄弟行。

【讨论】:

    【解决方案2】:

    我找到了答案!当我 console.log'd 的结果是:

    var next_row = $(this).nextAll('tr:visible');
    

    它声明 next_row 是一个 [Object object],而它实际上是一个对象数组。我使用调试器发现了这一点;。所以我只需要将行更改为:

    var next_row = $(this).nextAll('tr:visible:first');
    

    现在它可以工作了。

    谢谢:)

    【讨论】:

    • 你为什么还要使用nextAll()?如果你只想要第一行,你应该使用 next() 就像其他答案建议的那样......
    【解决方案3】:

    首先你不应该在迭代器中声明“var”。总是在外面声明。

    您的 .hasClass('region') 将始终返回 true,因为您的 next_row 返回所有 tr 元素。使用 .next('tr:visible') 代替。

    使用 .attr() 获得不同类的原因是它返回选择器的第一个元素。

    ..弗雷德里克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多