我有一个解决方案,但我的服务器实际上在今天下午崩溃了。 不幸的是,我没有检查我的工作代码。我在当天早些时候得到了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。这是一个艰难的一天,我很受骚扰,所以我可能错过了一些简单的事情。
感谢。
答案 0 :(得分:1)
DT
和DD
代码通常嵌套在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上的文章。