jQuery选择器使用包含不起作用

时间:2012-08-01 12:43:39

标签: jquery contains getelementsbytagname

我正在尝试查找包含“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>

2 个答案:

答案 0 :(得分:3)

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

cells[i].innerHTML

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

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

您仍然可以将jquery与普通JS一起使用来实现您的目标:

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

答案 1 :(得分:0)

你的代码应该有效......记住包含区分大小写,这可能是你的问题吗?

执行javascript时是否存在html?