我有一个关于JQuery的简单问题......
我有一个主<div>
包含一些具有动态ID的div。每个子div都有一个<h4>
标记。这些h4
没有任何id,也没有类,也没有名称。他们只有一些文字。
以下是我所说的:
<div id="main_div">
<div id ="div01">
<h4>Sometext01</h4>
</div>
<div id ="div02">
<h4>Sometext02</h4>
</div>
<div id ="div03">
<h4>Special Text!!!</h4>
</div>
<div id ="div04">
<h4>Sometext04</h4>
</div>
</div>
我想得到h4的父div的id是哪个文本是“特殊文本!!!” (所以,在这个例子中,它是div03)。
但是,不幸的是,这些ID是自动生成的(由Sugarcrm,对于那些知道的人),我无法提前知道id的名字。所以这就是为什么我必须通过h4。
我知道我可以使用下面的jQuery函数来传递所有h4
allMyH4.each()
我知道我可以使用下面的jQuery函数找到我想要的h4的父级
myFoundH4.parent()
但我在通过text()(或html())搜索h4时遇到了一些麻烦
你能帮帮我吗?
非常感谢
几小时后编辑:
感谢@Bhushan,我可以做我真正想要的事情。它只是有一个限制:我的用户不能改变h4文本NOR给几个h4同名包含我的字符串。 对于另一个解决方案,尝试@rory,它不适合我,但它已经被其他人测试过,它似乎比包含更好。
答案 0 :(得分:5)
您可以使用filter()
:
var $h4 = $('h4').filter(function() {
return $(this).text() == 'Special Text!!!';
});
console.log($h4.parent().prop('id'));
这将确保文本属性的完全匹配,而不是:contains
选择器将给出的部分匹配。 filter
也应该更快。
答案 1 :(得分:2)
您是否尝试过:contains()
?
var divId = $("h4:contains('Special Text!!!')").parent().attr('id');
如果其他<h4>
标记包含包含特殊文字!!! 的文字,但您不想选择它们,则可以.filter()
作为{ {3}}说:
var divId = $("h4:contains('Special Text!!!')").filter(function(i, elt) {
return $(elt).text() === 'Special Text!!!';
}).parent().attr('id');
但是,如果您有多个<h4>
个文本,那么 仍然可以匹配多个元素。
答案 2 :(得分:2)
试试这个:
$(function(){
var parentId = $('main_div').find('h4:contains("Special Text!!!")').parent().attr('id');
});
答案 3 :(得分:0)
$("h4").each(function(inx, elem){
var pattern = "Special Text!!!", el = $(elem);
if(el.text() == pattern){
console.info(el.parent().attr("id"));
}
});
更新: Roy McCrossan有一个很好的解决方案。
答案 4 :(得分:0)
试试这个: FIDDLE
$("h4").each(function(){
if($(this).text() === 'Special Text!!!')
{
var pid = $(this).parents().attr("id");
alert(pid);
}
});