选择其特定后代的HTML包含特定文本的元素?

时间:2016-08-21 19:22:14

标签: javascript jquery html

我想选择具有div后代的所有cite,并且cite后代的HTML包含一些text。我试过了:

$('div')
  .filter('cite')
    .filter(function() {
              return $(this).html().match('text');
    })

和此:

$('div')
  .filter('div cite')
    .filter(function() {
              return $(this).html().match('text');
    })

但它不起作用。这里缺少什么?

也就是说,我想在以下HTML中选择第3个div

HTML:

<div id="abcd">text1 text2</div>
<div id="abccd">text1 text2</div>
<div id="abcccd">
  <cite><b>text1</b>text2</cite>
</div>
<div id="abd">text1 text2</div>

编辑: 我想要选择的是 $('div cite')。我想选择$('div'),其中divcite个后代,而cite后代的内容包含一些文字。

4 个答案:

答案 0 :(得分:5)

使用<span class="meta-label"> <?php echo $database['XML'] ?> </span> <span class="meta-content">Content</span></li> 选择器:

:contains()

感谢@JonSG:

  

OP。已经在评论中提出了一个不同的答案,如何这样做   只需使用filter()即可完成,而无需使用   nearest()或parent()。我不是很热衷于这个答案,但你可能会这样做:

$("div").find("cite:contains('text')").closest("div");

或者:

var target = $("div").filter(function() {
  return $(this).find("cite:contains('text')").length !== 0;
});

$(target).css("background-color", "coral");

答案 1 :(得分:2)

这个怎么样?

$("div").has("cite:contains('text')");

答案 2 :(得分:0)

你可以试试这个:

var target = $("div").filter(function() { return /text/.test($(this).find("cite").html()); }); $(target).css("background-color", "tomato");

$("div cite").each(function() {

` // $(this).text() get the text of cite`

答案 3 :(得分:0)

要达到预期效果,请使用以下选项

$( "cite" ).each(function( index ) {
  console.log( $( this ).text() );
});

http://codepen.io/nagasai/pen/xONxbZ