【问题标题】:jQuery selector using contains not working使用包含的jQuery选择器不起作用
【发布时间】:2012-08-01 12:43:39
【问题描述】:

我正在尝试查找所有包含“FieldName=”的表格单元格。我最初使用 getElementsByTagName 执行此操作,然后使用 indexOf 循环测试,它工作得很好,得到 191 个单元格,然后完美地成功测试了我的目标单元格。

然后我用 $("td:contains('FieldName')");它失败了。我试过反斜杠等号,双反斜杠甚至删除它,我仍然得到零命中。这种情况是正确的,因为它可以与 indexOf 一起使用,无需转换为 UC 或 LC。

帮助! :-) 说真的,标准的 JS 可以工作,所以我会过得去,但是不能使用这么酷的工具并且不知道为什么真的很令人沮丧。这是我的代码 - 注释和取消注释以查看两种方法的结果:

//var cells = document.getElementsByTagName("td");
var cells = $("td:contains('FieldName\=')");
alert(cells.length);
for (var i = 0; i < cells.length; i++) {
    if (cells[i].innerHTML.indexOf('FieldName=') > -1) {
        // do stuff here...
    }
}

我敢肯定,当有人发现我的错误时,我会觉得很傻,但我们就是这样学习的,嗯? :-)

一个样品池:

        <TD valign="top" class="ms-formbody" width="400px">
    <!-- FieldName="Title"
         FieldInternalName="Title"
         FieldType="SPFieldText"
      -->
        <span dir="none">
    <input name="ctl00$m$g_c2ed1f85_8eef_4759_817c_cd68435bd0a3$ctl00$ctl04$ctl00$ctl00$ctl00$ctl04$ctl00$ctl00$TextField" type="text" maxlength="255" id="ctl00_m_g_c2ed1f85_8eef_4759_817c_cd68435bd0a3_ctl00_ctl04_ctl00_ctl00_ctl00_ctl04_ctl00_ctl00_TextField" title="Title" class="ms-long" /><br>
</span>


    </TD>

【问题讨论】:

  • html 方便吗?有助于加快速度:)
  • 另外,请提及您正在使用的 jQuery 版本...
  • 发布 HTML,这是我们能够解决此问题的唯一方法。
  • 我会发布一个单元格,但整个页面很大。但是,正如我最初所说,getElementsByTagName 和 indexOf 可以完成工作......
  • 另外,我应该补充一点,如果我删除包含,大小写无关紧要 - 无论我使用 td 还是 TD,我都会得到 191 个单元格,但如果我添加包含,我会得到 zip。

标签: jquery contains getelementsbytagname


【解决方案1】:

我在这里看到的问题是这行之间的区别:

cells[i].innerHTML

以及:contains 的工作方式。 :contains 搜索 text 字符串。它将忽略您的 HTML cmets。

innerHTML 工作的原因是它返回 everything 作为字符串,:contains 只会返回在该元素和子元素的 innerText 中找到的字符串。

您仍然可以将 jquery 与普通 JS 结合使用来实现您的目标,如下所示:

$("td").each(function () {
    // var this is the current element's DOM object
    if (this.innerHTML.indexOf("FieldName") != -1) {
        // do stuff
    }
});

【讨论】:

  • 有趣! API中没有提到这一点。如果 HTML cmets 不被视为单元格文本的一部分,您知道一种简单的方法来测试它们吗?
  • 没问题,如果我最好地回答了您的问题,请务必单击左侧的复选框。
  • 那么如果文本是 HTML 注释的一部分,那么没有选择器/子选择器可以直接测试元素的文本?
  • 没有内置的方法可以做到这一点。但是,this one 等一些插件可以让您在 DOM 中查询 cmets……但我觉得上面的方法效率更高。更多插件 = 加载更多数据 = 用户加载时间更长,尤其是在插件收益很小的情况下。
  • 我刚刚将它合并到我的代码中,它运行良好 - 再次感谢!虽然它显然在做我使用 getElementsByTagName 的原始代码所做的事情,但对于必须维护我的代码的下一个 schmuck 来说,阅读和理解它会更清晰。
【解决方案2】:

您的代码应该可以工作...记住 contains 区分大小写,这可能是您的问题吗?

执行 javascript 时是否存在 html?

【讨论】:

  • 这应该是作为对问题的评论,而不是作为答案。答案不是用来提问的。
  • 如果我能有...新的这里
猜你喜欢
  • 2020-07-10
  • 2014-02-14
  • 2019-12-06
  • 1970-01-01
  • 2012-05-26
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多