使用Javascript设置父节点与子节点的类';文本等于。。。?
我想将几个使用Javascript设置父节点与子节点的类';文本等于。。。?,javascript,html,dom,Javascript,Html,Dom,我想将几个元素的类设置为reset。这应该由JavaScript完成。我知道,通常使用JavaScript操作节点很容易,如下所示: function changeclass() { var trs = document.getElementsByTagName("tr"); for(var i=0; i<trs.length; i++) { trs[i].className = "reset"; } }; changeclass(); 现在我不知道问题是什么,方法不
元素的类设置为reset
。这应该由JavaScript完成。我知道,通常使用JavaScript操作节点很容易,如下所示:
function changeclass() {
var trs = document.getElementsByTagName("tr");
for(var i=0; i<trs.length; i++) {
trs[i].className = "reset";
}
};
changeclass();
现在我不知道问题是什么,方法不对吗?我对Javascript的理解有缺陷。。。任何提示都将被告知 JQuery
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$('tr td').each(function(){
if($(this).html() == 'reset') {
$(this).parent().addClass('reset');
)
});
</script>
$('tr td')。每个(函数(){
如果($(this.html()=='reset'){
$(this.parent().addClass('reset');
)
});
函数更改类(){
var trs=document.getElementsByTagName(“tr”);
//它至少有一个
对于(var i=0;i,您可能需要使用jquery和以下代码:
$("tr>td").each(function () {
$(this).parent().attr('class','reset');
});
反过来做:找到tds,然后访问家长:
var tds=table.getElementsByTagName("td");
for (var i=0;i<tds.length;i++) {
if (tds[i].innerHTML.indexOf("reset")>=0){
tds[i].parentNode.className="reset";
}
}
var-tds=table.getElementsByTagName(“td”);
对于(变量i=0;i=0){
tds[i].parentNode.className=“重置”;
}
}
函数更改类(){
var trs=document.getElementsByTagName(“tr”);
对于(var i=0;iA溶液:
现在trs
是所有tr
的数组,其中包含一个td
,文本为“reset”
,正确的表达式为
var trs = document.evaluate("//tr[td/text()='rest']", document.body, null, XPathResult.ANY_TYPE, null);
您还可以通过trs.iterateNext()访问节点
更新
文档更改后,结果将不再有效。因此,您可以将它们放入数组中,然后使用它。iterateNext()
var trsx=document.evaluate(“//tr[td/text()='rest']”,document.body,null,XPathResult.ANY_TYPE,null);
var-trs=[];
if(trsx){
var tr=trsx.iterateNext();
while(tr){
推力(tr);
tr=trsx.iterateNext();
}
}
对于(var i=0;iSo),如果它们只包含“reset”,或者如果它们只包含“reset”?尝试使用文档。querySelectorAll
,它将为您节省一些时间headaches@elclanrsAfaik QuerySelector无法检索元素的innerHTML,它们只是根据元素的属性进行查询。@Teemu:我不知道你的意思。QuerySelector all
提供了一个NodeList
就像getElementsByTagN一样ame
,所以你所要做的就是循环。@elclars我的意思是,最基本的操作就是找到一行,它的td
包含文本“reset”。查询选择器在元素中找不到文本,是吗?-没关系,在看到你的答案后,我知道你的意思:)。提问者希望它出现在
元素上,而不是
@PollyGeek,但这不会只选择那些文本等于“重置”的元素,对吗?现在它应该可以工作了,我只是确保你的所有TR都有TDs,因为如果没有TDs,那么条件将为false。+1,
元素只允许作为的子元素de>
元素,因此它工作得非常完美。有趣而且不需要任何脚本…出于好奇,indexOf(“reset”)>=0
部分是什么?它基本上意味着“包含字符串重置”@marvin\u dpr如果需要严格的相等值,可以使用(tds[i]。innerHTML==“reset”)insteadWorks很有魅力,并被接受为答案,因为尽管其他帖子也很有用,而且很优雅,但这篇文章展示了如何使用XPath来完成它。不幸的是,这不是一个跨浏览器解决方案(IE)。
var tds=table.getElementsByTagName("td");
for (var i=0;i<tds.length;i++) {
if (tds[i].innerHTML.indexOf("reset")>=0){
tds[i].parentNode.className="reset";
}
}
function changeclass() {
var trs = document.getElementsByTagName("tr");
for(var i=0; i<trs.length; i++) {
var tds = trs[i].getElementsByTagName('td'),
txt = trs[i].innerHTML.indexOf('reset') != -1;
if (txt && tds.length) trs[i].className = "reset";
}
}
changeclass();
// Query elements as real arrays
var query = function(selector, element) {
element = element || document;
return [].slice.call(element.querySelectorAll(selector));
};
var trs = query('tr').filter(function(tr) {
return query('td', tr).filter(function(td) {
return td.textContent.trim() == 'reset';
}).length;
});
var trs = document.evaluate("//tr[td/text()='rest']", document.body, null, XPathResult.ANY_TYPE, null);
var trsx = document.evaluate("//tr[td/text()='rest']", document.body, null, XPathResult.ANY_TYPE, null);
var trs = [];
if (trsx){
var tr = trsx.iterateNext();
while(tr){
trs.push(tr);
tr = trsx.iterateNext();
}
}
for(var i=0; i<trs.length; i++) {
trs[i].className = "reset";
}
var trs = document.evaluate("//tr[td/text()='rest']", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
if (trs){
for(var i=0; i<trs.snapshotLength; i++){
tr = trs.snapshotItem(i);
tr.className = "rest";
}
}