2017-05-31 21 views
1

DOM要素でいくつかのテストを実行していますが、 の結果は要素子孫の1つです。例えば :クローンされた要素の子要素を参照する方法

<div id="myelement" class="some-class"> 
    <div class="some-child-class"></div> 
    <div class="some-other-child-class"> 
    <div class="grandchild-class"></div> 
    <div class="another-grandchild"></div>* 
    </div> 
</div> 

だがそれを想定してみましょう: 試験手順は重いとリソース消費である:

test(document.getElementById('myelement')); 

は要素を返します。今私の問題があるアスタリスク

でマークされました。 私はそれを実行したくないときに私はそれを実行したくありません。 そして、私はすでにテストされている要素(つまり、テストの結果を知っていることを意味する)をクローンしますが、結果としてオブジェクト参照を取得しているので、クローンの関連する子にアクセスすることはできません素子。

親要素から特定の子孫DOM要素への相対パスを何らかの形で「保存」して別の要素に適用する方法はありますか?

+0

理由だけではなく、DOMかかわらトラバースよりも要素を選択していませんか? – evolutionxbox

+0

セレクタを再利用しようとしましたか?セレクタは単なる文字列です。私は: 'input .withclass'です。これを任意の要素セットで再利用できるはずです。 – Nope

+0

おそらく何らかの形でテスト済みの要素をマークしますか?たとえば、データセットを使用します。 – Deus777

答えて

-1

これにはjQueryを使用できます。

これらのセレクタは、 'nth-child'または 'nth-of-type'の形式を取ることができます(ドキュメントhereを参照)。

これは、対象の子要素が、あなたがどこから始めて相対的な位置にあるかを示します。あなたのケースでは あなたが最初の要素から開始し、あなたが行うことができますスターを付けたものにダウンしたい場合は:これは何

$('#myelement').find('div:nth-child(2) > div:nth-child(2)') 

それはあなたが検索を開始します、そこからベースとして#myelementかかることですその後、それはdivである2番目の子要素に戻り、このdivの2番目の子要素に戻ります。 セレクタを別のベースで再利用することができます。

+0

jQueryがタグ付けされておらず、質問自体で参照されていないときは、jQueryの使用をお勧めしません。 – evolutionxbox

+0

OPはほんの数msで動作するテストでスピードを向上させたいと思うようですが、別のライブラリを導入することはおそらくテストのスピードアップには役に立たないでしょう。 – Nope

+0

申し訳ありませんOPは純粋なjavascriptを求めています。パフォーマンスはそれほど悪いとは思えません。 –

0

したがって、各要素に一意のIDを割り当て、テスト結果を要素IDのオブジェクトにキャッシュできます。しかし、これが有用かどうかはわかりません。実装例:

var test=function(el){ 
    return this[el.id] || (this[el.id]=advancedtesting(el)); 
}.bind({}); 

だから、あなたができる:

test(document.getElementById('myelement'));//caches 
test(document.getElementById('myelement'));//returns the cached 
関連する問題