3

これは冗長な質問だと思いますが、私は1時間ほど探して手ぶらで出てきたので、誰かが助けてくれることを望んでいました...

'Chicken'(または値が何であれ)を検索するときに、JS(jqueryではなく)を使用して以下のliのクラスを返す方法を探しています。

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

したがって、スパン値(この場合はChicken)が指定されたときにjavascriptがliクラスを返すことを期待していました。

ありがとう!

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; (一致後に提案を含めるように更新)

の型チェックを追加して、parentNodeそれがであることを確認することもliできますが、これで開始できます。

また、これが大きなドキュメントでどれほど効率的かはまったくわかりません。

編集
いくつかのコメントを読んだ後、上記のコードを更新して、ajax333221によって提案されたブレークを含めました。

デニスは、を呼び出す方がよいと述べgetElementByTagNameましたul。OPにタグがあるかどうかわからないので、ここに別のコードとして追加しましたliulul

それぞれに対するコードクエリ(ここではuljsFiddle )

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

これは決して完全ではありません。そのため、ライブラリを探す必要がありますが、次の2つのことを行います。

  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 に答える