如何使用 javascript/jquery 获取元素的 class 名称具有特定文本?
How to get class name of element has specific text using javascript/jquery?
我需要一种 JavaScript 或 jQuery 方法来通过它包含的文本提取 DIV 元素的 Class 名称。
让我们举例说明。如果我让我们说下面的代码:
<div class="_className">UniqueText</div>
我需要知道如何以编程方式执行如下操作:
getClassNameWhereText("UniqueText");
在这种情况下输出应该是:
_className
有办法吗?
您可以使用:contains(word)
var className = $( "div:contains('John')" ).attr("class");
console.log(className)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">John Resig</div>
<div class="bar">George Martin</div>
<div class="foo">Malcom John Sinclair</div>
<div class="baz">J. Ohn</div>
JQuery :contains
select 或 select 元素具有特定文本,但不准确。例如
$("div:contains(UniqueText)")
Select 两个底部 div
<div class="_className">UniqueText</div>
<div class="_className2">UniqueText2</div>
您可以使用 .filter()
按文本过滤 selected 元素。
var className = $("*").filter(function(){
return $(this).text() == "UniqueText";
}).attr("class");
var className = $("*").filter(function(){
return $(this).text() == "UniqueText";
}).attr("class");
console.log(className);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="_className">UniqueText</div>
<div class="_className2">UniqueText2</div>
您可以为您的 div 保留一个 ID,根据您的信息,您的文本将是唯一的。
<div id="UniqueText" class="_className">UniqueText</div>
而js代码将是
function getClassNameWhereText(text){
var className = $('#'+text).attr('class');
console.log(className);
}
更新: 如果你想使用包含
那么你可以这样做,
function getClassNameWhereText(text){
var val = document.getElementById(text).value;
if(text.indexOf(val)>=0){
var className = $('#'+text).attr('class');
console.log(className);
}
}
通过获取每个函数的所有 div
,您可以搜索所有 div 并放置一个条件,使 div
的值等于您想要的特定文本寻找。然后使用 .attr('class')
.
获取 class 名称
$( "div" ).each(function(){
if($(this).text() == "UniqueText"){
var output = $(this).attr('class');
$(".output").html(output);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="_classname">UniqueText</div>
<div class="output"></div>
代码可能有点长,但可以很好地完成工作。 :)
这应该比使用 jQuery 更快(但需要输入更多):
var xpath = "//div[text()='UniqueText']";
var result = document.evaluate(xpath,
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE);
var node = result.singleNodeValue;
if (node) {
console.log(node.className);
} else {
console.error("Not found!");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="_className">UniqueText</div>
原因是,浏览器的 CSS 选择器不支持 :contains
选择器,jQuery 需要通过检查与其余选择器匹配的每个节点来模拟它。同上使用 .filter
。但是 XPath 是由浏览器本机完成的。
您也不能像此处那样使用 jQuery :contains
指定完全匹配。如果确实需要子字符串匹配,您可以更改 XPath:
var xpath = "//div[contains(text(),'UniqueText')]";
XPath 非常强大,但有点挑剔而且在很大程度上不为人知,所以我发现它的利用率很低,即使它的使用非常合适。
我需要一种 JavaScript 或 jQuery 方法来通过它包含的文本提取 DIV 元素的 Class 名称。
让我们举例说明。如果我让我们说下面的代码:
<div class="_className">UniqueText</div>
我需要知道如何以编程方式执行如下操作:
getClassNameWhereText("UniqueText");
在这种情况下输出应该是:
_className
有办法吗?
您可以使用:contains(word)
var className = $( "div:contains('John')" ).attr("class");
console.log(className)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">John Resig</div>
<div class="bar">George Martin</div>
<div class="foo">Malcom John Sinclair</div>
<div class="baz">J. Ohn</div>
JQuery :contains
select 或 select 元素具有特定文本,但不准确。例如
$("div:contains(UniqueText)")
Select 两个底部 div
<div class="_className">UniqueText</div>
<div class="_className2">UniqueText2</div>
您可以使用 .filter()
按文本过滤 selected 元素。
var className = $("*").filter(function(){
return $(this).text() == "UniqueText";
}).attr("class");
var className = $("*").filter(function(){
return $(this).text() == "UniqueText";
}).attr("class");
console.log(className);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="_className">UniqueText</div>
<div class="_className2">UniqueText2</div>
您可以为您的 div 保留一个 ID,根据您的信息,您的文本将是唯一的。
<div id="UniqueText" class="_className">UniqueText</div>
而js代码将是
function getClassNameWhereText(text){
var className = $('#'+text).attr('class');
console.log(className);
}
更新: 如果你想使用包含 那么你可以这样做,
function getClassNameWhereText(text){
var val = document.getElementById(text).value;
if(text.indexOf(val)>=0){
var className = $('#'+text).attr('class');
console.log(className);
}
}
通过获取每个函数的所有 div
,您可以搜索所有 div 并放置一个条件,使 div
的值等于您想要的特定文本寻找。然后使用 .attr('class')
.
$( "div" ).each(function(){
if($(this).text() == "UniqueText"){
var output = $(this).attr('class');
$(".output").html(output);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="_classname">UniqueText</div>
<div class="output"></div>
代码可能有点长,但可以很好地完成工作。 :)
这应该比使用 jQuery 更快(但需要输入更多):
var xpath = "//div[text()='UniqueText']";
var result = document.evaluate(xpath,
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE);
var node = result.singleNodeValue;
if (node) {
console.log(node.className);
} else {
console.error("Not found!");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="_className">UniqueText</div>
原因是,浏览器的 CSS 选择器不支持 :contains
选择器,jQuery 需要通过检查与其余选择器匹配的每个节点来模拟它。同上使用 .filter
。但是 XPath 是由浏览器本机完成的。
您也不能像此处那样使用 jQuery :contains
指定完全匹配。如果确实需要子字符串匹配,您可以更改 XPath:
var xpath = "//div[contains(text(),'UniqueText')]";
XPath 非常强大,但有点挑剔而且在很大程度上不为人知,所以我发现它的利用率很低,即使它的使用非常合适。