使用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";                  
    }
}