在HTML文档中搜索特定内容不再有效

时间:2013-07-02 23:54:49

标签: jquery dom

我有一个解决方案,但我的服务器实际上在今天下午崩溃了。 不幸的是,我没有检查我的工作代码。我在当天早些时候得到了StackOverflow的帮助,以使我的代码正常工作,并且我已经使用了我之前发布的帖子中的答案,但它已经不再有效了。 =(

反正。我想要做的是找到一个标签,里面有一些文字,并为元素分配和ID。

这是HTML:

<DT>change me dynamically</DT>
<DD>
<input class=" text" type="text"  name="contact_details"  value=""  id="contact_details" >
<P CLASS="descr"></P>
</DD>

我想通过查询对此代码执行的操作如下所示:

<DT id="contactTypeLabel">Phone Number</DT>
<DD>
<input class=" text" type="text"  name="contact_details"  value=""  id="contact_details" >
<P CLASS="descr"></P>
</DD>

这是我之前使用的代码:

$('body >DT:contains("change me dynamically")').contents().each(function () {
    var exp = /change me dynamically/;
    alert("nodevalue is:" + this.nodeValue);       
    if (this.nodeValue && exp.test(this.nodeValue)) {
        var $parent = $(this).parent().attr('id', 'contactTypeLabel');
        $parent.text(function(_, text){
           return  text.replace(exp, "Phone Number");
        }); 
    }
}); 

警报永远不会发生。如果我通过这样做扩大搜索范围:

$('body :contains("change me dynamically")').contents().each(function () {

然后我收到许多警报声明。但实际上,我只有一个元素,文字“动态地改变我”。

对那些早些时候帮助我的人抱歉。我确实尝试过检查之前的所有笔记......但我似乎无法找到这个bug。这是一个艰难的一天,我很受骚扰,所以我可能错过了一些简单的事情。

感谢。

1 个答案:

答案 0 :(得分:1)

描述

DTDD代码通常嵌套在DL代码中。选择器:

$('body >DT:contains("change me dynamically")').contents().each(function () {

仅查找作为DT节点的直接后代的body个节点,跳过另一个节点内的任何节点。但是,以下代码段将范围扩展为包含该文本的任何节点:

$('body :contains("change me dynamically")').contents().each(function () {

解决方案

您可能正在寻找的是在DT内查找包含该文本的DL个节点的内容:

$('body DL>DT:contains("change me dynamically")').contents().each(function () {

或者只是包含文本的任何DT节点:

$('body DT:contains("change me dynamically")').contents().each(function () {

信息

有关详细信息,请参阅child selector上的文章。