Jquery找到一个没有id,名字和类的特定H4

时间:2014-07-17 10:26:29

标签: javascript jquery html each

我有一个关于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,它不适合我,但它已经被其他人测试过,它似乎比包含更好。

5 个答案:

答案 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); 
    }
});