我可以使用jQuery检查整个页面是否包含文本吗?

我可以使用jQuery检查整个页面是否包含文本吗?,jquery,Jquery,有没有一种方法可以使用jQuery来判断整个网页是否包含一些文本?例如,在StackOverflow上,我可以在控制台中使用以下命令返回包含单词“Badges”的任何div: $("div:contains('Badges')") 然而,当我写作时: $(document:contains('Badges')) 或 我犯了一个错误。如何检查页面上的任何元素是否包含某些文本并返回这些元素?请尝试: $("html:contains('Badges')") 您还可以使用: $("body:co

有没有一种方法可以使用jQuery来判断整个网页是否包含一些文本?例如,在StackOverflow上,我可以在控制台中使用以下命令返回包含单词“Badges”的任何div:

$("div:contains('Badges')")
然而,当我写作时:

$(document:contains('Badges'))

我犯了一个错误。如何检查页面上的任何元素是否包含某些文本并返回这些元素?

请尝试:

$("html:contains('Badges')")
您还可以使用:

$("body:contains('Badges')")
$(“*”).filter(函数(){return$(this.text()==“徽章”})

这一个也将检查内部子级的内容


编辑:更改为仅返回内容精确为“徽章”的元素

要仅选择包含文本的最深节点,请使用以下命令

var textToFind = 'Badges';

$(function(){
  var allTextNodes = $("*").contents().filter(function () {
    return this.nodeType === Node.TEXT_NODE;
  });
  
  var matchingNodes = allTextNodes.filter(function(){return this.textContent.indexOf(textToFind) > -1;}).parent();

  // matchingNodes is a list of all nodes (tags) that contain the searched text
});

或者以插件的形式

$(function(){
  $.fn.nodesWithText = function(textToFind){
    var allTextNodes = $("*", this)
                        .addBack()
                        .contents()
                        .filter(function () {
                          return this.nodeType === Node.TEXT_NODE;
                        }),
        matchingNodes = allTextNodes
                          .filter(function(){
                            return this
                              .textContent
                              .indexOf(textToFind) > -1;
                          });
    return matchingNodes.parent();
  };
});
您可以将其用作
$(document).nodesWithText('Badges')
将在整个文档中搜索具有指定文本或
$('div').NodeWithText('Badges')的任何元素
将在
div
元素中搜索包含指定文本的任何其他节点。(第二个使用方法不会返回
div
元素,而是在
div
元素中搜索包含文本的任何类型的标记)

演示在

(插件可以简化为在检查节点类型的同时进行文本匹配。为了更清楚地看到实际需要的步骤,我分两次完成了它)

$(文档)。text().包括('徽章')

这将回答这个问题的标题“我可以使用jQuery检查整个页面是否包含文本吗?”


但它不会返回节点。

您知道,如果元素包含所需的文本,它的所有祖先也将匹配,因此也将被返回?您需要让每个单独的项都包含字符串吗?@gabykag.Petrioli我希望只返回直接包含文本的元素。@RejithRKrishnan是的。这将返回DOM的整个
html
正文
。我希望只返回列表中直接包含文本的元素。嗯,很接近,但这会返回所有内容,即使它只是包含文本的一个子元素。我只想返回直接包含该文本的元素。修正了密码。我测试了这个。它应该符合你的要求。记住“过滤器”功能。每个人都忽略了这一点,直到最后一刻:)哦,把
==
改为从我们的目的开始,根据您的需要使用我们的。上面的代码需要精确的值,即使它有精确的值+内部元素也会被拒绝,因为它将把这些看作是文本的一部分,因此失败的作品就像一个符咒。
$(function(){
  $.fn.nodesWithText = function(textToFind){
    var allTextNodes = $("*", this)
                        .addBack()
                        .contents()
                        .filter(function () {
                          return this.nodeType === Node.TEXT_NODE;
                        }),
        matchingNodes = allTextNodes
                          .filter(function(){
                            return this
                              .textContent
                              .indexOf(textToFind) > -1;
                          });
    return matchingNodes.parent();
  };
});