如何使用 jQuery 选择具有特定文本的中间节点:包含选择器?

Posted

技术标签:

【中文标题】如何使用 jQuery 选择具有特定文本的中间节点:包含选择器?【英文标题】:How to select middle nodes with specific text using jQuery :contains selector? 【发布时间】:2021-02-23 00:13:05 【问题描述】:

我想获取包含特定文本的 html 元素,我使用了:contains 选择器。但是,我没有获得目标节点。

在此示例中,我试图获取所有具有“今天?”的元素文本,即使它与 <a><span><sup> 等其他内联元素分开。

所以我期待结果:DIV.some-class, P.another-class

//let results = $(':contains(today?):not(:has(*))')
let results = $(":contains('today?')").not("script")


results.each(function() 
  console.log(`$this.tagName$this.className ? '.' + this.className : ''`)
)
/**
prints HTML, BODY, DIV.content, DIV.some-class, P.another-class
*/

console.log()



let results2 = $(":contains('today?')").not("script").children().filter(function() 
  return ($(this).text().indexOf("today?") > -1)
).get()

results2.forEach(r => 
     console.log(`$r.tagName$r.className ? '.' + r.className : ''`)
)

/**
prints BODY, DIV.content, DIV.some-class, P.another-class
*/

console.log()

let results3 = $(":contains('today?')").not("script").filter(function() 
    return (
    $(this).clone() //clone the element
    .children() //select all the children
    .remove() //remove all the children
    .end() //again go back to selected element
    .filter(":contains('today?')").length > 0)
).get();

results3.forEach(r => 
     console.log(`$r.tagName$r.className ? '.' + r.className : ''`)
)

/**
prints P.another-class
*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='content'>
  <div class='some-class'>
    Hello world! How are you<a> doing today</a>?
  </div>
  <div class='some-other-class'>
    Bye world!
  </div>
  <p class='another-class'>
    Any <b>plans</b> for today?
  </p>
</div>

【问题讨论】:

您可能会在这里得到一些想法。 ***.com/questions/21172170/… 【参考方案1】:

您可以使用 children() 并包含一个选择器。这是一个可行的解决方案:

var elements = $('.content').children().filter(":contains('today?')");
var result = $.map(elements, function (el) 
      return `$el.tagName$el.className ? '.' + el.className : ''`;
 );

console.log(result.join(', '));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class='content'>
  <div class='some-class'>
    Hello world! How are you<a> doing today</a>?
  </div>
  <div class='some-other-class'>
    Bye world!
  </div>
  <p class='another-class'>
    Any <b>plans</b> for today?
  </p>
</div>

【讨论】:

以上是关于如何使用 jQuery 选择具有特定文本的中间节点:包含选择器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 选择文本节点?

如何在 jQuery 中实现任意文本节点选择

如何使用 jQuery 选择具有特定类的下一个表行?

如何使用 XSL 选择特定元素节点中的所有文本节点?

如何使用jquery知道是不是存在具有特定ID的div [重复]

如何使用 jquery 选择某些文本节点?