2013-01-13 37 views
30

jQueryの新機能ですので、密集していることを許してください。私は、ChromeのJSコンソールを介して、特定のページ上のすべての<td>の要素を選択します:シンプルなjQueryセレクタは、Chromeの最初の要素のみを選択します。

$('td') 

私はこれを行うときしかし、私は次のような出力が得られます。

<td>Apples</td> 

はjQueryが返すように想定されていません<td>タグを持つ要素の配列?なぜこの基準に合致する最初の要素しか見ていないのですか?ここで

は、問題のサイトです:http://www.w3schools.com/html/html_tables.asp

編集:私はクロームコンソールにjQueryの機能を入力すると、私は戻ってjQueryオブジェクトを取得しないことを追加したいと思います。プレーンなHTML要素が得られます。 Chromeがセットアップ/設定されている方法に何か間違っている必要があります。

+0

実際にはすべての要素が選択されます。 [要素セレクタ](http://api.jquery.com/element-selector/) – Fallup

答えて

49

jQueryのWebページ上に存在しない、そしてもちろん他のコードが$に何かを割り当てていない場合は、ChromeのJSコンソールがdocument.querySelector()$ショートカットを割り当てます。

コンソールでdocument.querySelectorAll()へのショートカットが割り当てられた$$()を使用して、目的を達成できます。

ページにjQueryが含まれているかどうかを確認するには、jQueryをコンソールで実行できます。 jQueryが$に割り当てられているかどうかを確認するには、$().jqueryを実行します。この場合、jQueryバージョンが返されます。

また、すべてのWebページにjQueryを挿入するためのブラウザアドオンがあります。

+1

マイナーな修正: '$'は 'document.getElementById'のエイリアスではありません。' document.querySelector'のエイリアスです。 https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference#queryselector – fbonetti

+1

この修正は間違いなくマイナーではありません:-)実際には、動作が変更されています。グーグルで私は[WebKitチケット92648](https://bugs.webkit.org/show_bug.cgi?id=92648)を見つけました。この変更を指摘してくれてありがとう。 –

4

jQueryがインストールされていて、$シンボルがjQueryの省略形である場合、$('td')はjQueryオブジェクトを返します。しかし、あなたがリンクしているw3schoolsページでは、jQueryが存在することはありません。

jQueryが存在し、デバッガが$シンボルをオーバーライドしていない場合、$('td')はjQueryオブジェクトを返します。 jQueryオブジェクトは配列のようなオブジェクトであり(配列のいくつかのプロパティを持ちます)、実際の配列ではありません。コンソール内のものを見ている場合は、含まれているjQueryオブジェクトではなく、DOM要素自体を確認する必要があります。

あなたはDOM要素の実際の配列を取得したい場合は、あなたがこれを行うことができます:DOM要素の配列を返します

$('td').get(); 

これが機能しない場合は、$('td').get()への呼び出しのタイミングを調べて、検索する前にすべてのtdアイテムがページにあることを確認する必要があります。

+0

おそらく、私のChromeの設定に問題がありますか? '$( 'td')と入力すると、jQueryオブジェクトが返されません。単純なHTML要素が得られます。 。私は '$(「TD」)入力したときに同様に(取得)'私は、エラーメッセージ 'TypeError例外を取得:オブジェクト#方法はありません「 – fbonetti

+0

@effbottをget'' - それはクロームデバッガがオーバーライドしていることかもしれ' $ 'をデバッグのショートカットとして使用します。 'jQuery( 'td')'を使ってみてください。 – jfriend00

+0

jfriend00、それは右のように聞こえる。コンソールに 'jQuery( 'td')'と入力すると、エラーメッセージ 'ReferenceError:jQuery is not defined'が表示されます。おそらく私はちょうどChromeを再インストールする必要がありますか?私はいつもこの問題を抱えていませんでした。 – fbonetti

0

また、それぞれのtdで何かをしようとしている場合は、.each()を使用してループする必要があります。たとえば、次のように

$('td').each(function() { 
    //do something relevant here 
}); 
14

jQueryが適切にターゲットページで実行されていないようです。私も同様の問題を抱え、Google Chromeについて次のように解決しました。

は、(それが読みやすくするために美化です)URLフィールドとして、次のワンライナーのコードを含むChromeブラウザにブックマークを追加します。

javascript: (function() { 
    var s = document.createElement('script'); 
    s.setAttribute('src', 'http://code.jquery.com/jquery-latest.min.js'); 
    if (typeof jQuery == 'undefined') { 
     document.getElementsByTagName('head')[0].appendChild(s); 
    } 
    jQuery("td.edit select option[value=BN]").attr("selected", ""); 
})(); 

それからちょうどそれを実行するために、そのブックマークをクリックしてください。通常はjQueryをインクルードし、$と入力するとfunction (e,t){return new b.fn.init(e,t,r)}のようなものを返すようにしてください。

(もブックマークレットと呼ばれる)のブックマークを作成するプロセスは、コンソールでの仕事を希望するすべてのページでjQueryのを注入するための短い手です。ただし、スニペットコードはJSコンソールに直接貼り付けても機能します。

PS:私はしばらくの間、それを使用していると私はそれから取得する場所を覚えてすることはできませんので、スニペットのためのローンは、私のものではありません。

希望します。

+0

コードをURLとして保持するにはどうすればよいですか?私が入力した瞬間、それはGoogle検索(私はGoogle検索に設定されたオムニバーを持っている)です。 – akki

+0

Chromeを使用すると、スニペットをアドレスバーに入力すると、文字列の先頭にある「javascript:」部分が奇妙に省略され、コマンドが検索用語として解釈されます。私はFirefoxでテストしましたが、それは起こりません。スニペットを直接アドレスバーに使用する場合は、関数宣言の前に "javascript:"と入力してください。 – rdonatoiop

+0

ええ、それも私と一緒に起こる...私は 'javascript:'を手作業で追加しましたが、何も起こらず、ページがリロードされたり、何か...ブックマークできないものはありません – akki

関連する問題