2011-07-03 4 views
4

外部サイトのレイアウトを操作しようとしている間、私はしばしばセレクタのチェーンを使用して、必要な特定の要素をターゲットにしなければなりません。これに初めて遭遇したとき、私はjQueryソリューションを提供され、結果を得るのはとても簡単です。私はjQueryに頼らないことを好み、これが標準のJavascriptでどのように実行可能であるかを知りたいと思います。ここでは例としてjQueryの 'チェーン' です -jQueryなしでJavascriptでセレクタをチェーンする方法

$('div[id="entry"] > p[class="header"] > span[id="title"] > div[class*="entry"] > p[class="title"] > a[class*="target"]').. etc 

だから、HTMLの構造は、大きく

<div id="entry"> 
    <p class="primary"> 
    <p class="header"> 
     <span class="side"> 
     <span id="title"> 
      <div class="secondary entry"> 
       <p class="return"> 
       <p class="title"> 
        <a class="img"> 
        <a class="mytargetelement"> 

それでは、どのように、これは通常可能ですって?ありがとう。

+0

は、私はあなたの階層があなたの例よりも複雑であることを前提としていますが、 '$(「のdiv#エントリ[クラス* =要素]」)' – Dexter

+0

はい、謝罪にあなたのセレクタを簡素化することができます。私はそれが細部まで可能だったかどうかを見るために必要だったより複雑なチェーンを見せようとしていたと思います。 – gavin19

答えて

8

document.querySelectorAllを入力します。

jQueryがサポートしているブラウザでは、jQueryが内部的に使用するものです。構文は、jQuery(Sizzle)セレクタと同じです(Selectors APIを参照)。

+0

IE6と7はサポートされていませんhttp://caniuse.com/queryselector – Candide

+0

これはまさに私が探していたものです。 IE6/7互換性の欠如は問題ではありません。乾杯! – gavin19

3

これは..あなたがchildNodesプロパティを経由してその子を得ることができ、それぞれの連鎖/ネストされた要素について

きれいではありません。そして、ループを開始しましょう。 :/次に、適切に一致する要素が見つかるまで、すべての子と子の子を再帰的にループする必要があります。を更新しました

:あなたはjQueryのを避けるだけで、複雑なCSSセレクタを使用したい場合は、

if (element.className.indexOf('myClass') >= 0) { 
    // found it! 
} 
+0

私は、再帰がDOMツリーの探索に適していると言います。 – Candide

+0

@ローランド、それはまさに私が意味していたものです。私はそれがループを言及したときに暗示されていると仮定しましたが、おそらく十分にはっきりしません。 – Kon

+0

@Konありがとうございました。私はelement.classNameメソッドを知らなかった。それは覚えておくと便利です。 – gavin19

2

クラス名の一部かどうかを確認するには、このような何かを行うことができますSizzleJS libraryが必要な場合があります。 DOM要素を探すたびに、自分で行うよりもはるかに簡単です!

+0

ええ、私はそれが実際にシズルであり、jQuery自体ではないことに気付きました。私は、外部ライブラリをまったく使用せずに可能であるかどうかを確認したかっただけです。とにかくありがとう。 – gavin19

1
function selectors(){ 
     var temp= [];  //array for storing multiple id selectors. 
     for(var i = 0;i<arguments.length;i++){ 
     if(typeof arguments[i] === 'string') 
     temp.push(document.getElementById(arguments[i])); 
      } 

      return temp; //for chanining 
     }, 

now call the function as many time as you want like 
selectors('p').selectors('anyid') 
+0

これを試してみてください。これはalways.nowで動作します。あなたが望むようにあなたの必要性に応じてこの関数を変更することができます.Xpathセレクタはfunction.simplyを変更するだけです。JQUERY – Ankur

関連する問題