3

我敢肯定这是一个多余的问题,但我已经找了一个小时左右,空手而归,所以希望有人能帮忙......

寻找一种在搜索“鸡”(或任何值)时使用 JS(不是 jquery)返回下面 li 的类的方法。

<li class='113252'>
    <span>Chicken</span>
</li>

所以希望javascript在给定span值时返回li类(在本例中为Chicken)。

谢谢!

4

2 回答 2

5

尝试这个:

var spanArray = document.getElementsByTagName('span');

for (var i=0; i<spanArray.length; i++) {
    if(spanArray[i].innerHTML.toUpperCase() === 'CHICKEN')
    {
        alert(spanArray[i].parentNode.className);
        break;
    }
}

现在,我更熟悉 jQuery,但似乎在此处链接的小提琴中工作:http: //jsfiddle.net/FranWahl/fCzYc/2/(更新以包括break;匹配后的建议)

您可以为 the 添加更多类型检查parentNode以确保它是 anli等等,但这应该可以帮助您入门。

另外,我完全不确定这在大文档中的效率如何。

编辑
阅读了一些评论后,我更新了上面的代码,以包括ajax333221建议的中断。

丹尼斯提到最好打电话getElementByTagNameul. 鉴于你可以有一个li没有 aul我在这里添加它作为单独的代码,因为我不确定 OP 是否有ul标签。

针对每个查询的代码(此处ul为 jsFiddle )

var ulArray = document.getElementsByTagName('ul');
var parentFound = false;

for (var i = 0; i < ulArray.length; i++) {
    var spanArray = ulArray[i].getElementsByTagName('span');

    for (var i = 0; i < spanArray.length; i++) {
        if (spanArray[i].innerHTML.toUpperCase() === 'CHICKEN') {
            alert(spanArray[i].parentNode.className);
            parentFound = true;
            break;
        }
    }

    if(parentFound)
    {
        break;
    }
}​
于 2012-04-28T21:29:13.580 回答
0

这绝不是完全完整的,这就是你应该寻找图书馆的原因,但它做了两件事:

  1. 递归遍历子元素(从文档的 BODY 开始),找到提供的文本
  2. 递归遍历父元素找到提供的父元素标签,一旦找到就会返回该父元素的类

JSFiddle:http: //jsfiddle.net/vol7ron/bttQN/

function getParentClass(element, parentTag){
   if (element.tagName == parentTag.toUpperCase())
       return element.className;
   return getParentClass(element.parentNode,parentTag);
}

window.findParentClass = function (text,tagName){
    var elements = document.getElementsByTagName('body');
    for (var n=elements.length; n--;){
        var foundClass = (function searchNextChild(el){
            if (!el.children.length) {
                if (el.textContent == text) 
                   return getParentClass(el,tagName);
                return;
            }
            for (var i=0, n=el.children.length; i<n; i++)
               return searchNextChild(el.children[i]);
        })(elements[n]);

        return foundClass;
    }
};

示例调用:

alert( findParentClass('Chicken','li') );
于 2012-04-28T22:09:40.330 回答