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