需要帮助在Javascript中查找/遍历dom

时间:2012-04-28 21:03:52

标签: javascript dom

我确信这是一个多余的问题,但我已经找了一个小时左右,空手而归,所以希望有人可以提供帮助......

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

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

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

谢谢!

2 个答案:

答案 0 :(得分: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;

您可以为parentNode添加更多类型检查以确保它是li,依此类推,但这应该可以让您入门。

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

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

Dennis提到最好在getElementByTagName上致电ul。 鉴于您可以拥有li而没有ul我在此处将其添加为单独的代码,因为我不确定OP是否有ul个标记。

查询每个ul(jsFiddle here

的代码
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;
    }
}​

答案 1 :(得分:0)

这绝不是完全完整的,这就是为什么你应该寻找一个库,但它做了两件事:

  1. 以递归方式遍历子元素(从文档的BODY开始),以查找提供的文本
  2. 以递归方式遍历父元素以查找提供的父元素标记,一旦发现它将返回该父元素的类
  3. 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') );