2013-05-03 12 views
8

これは私が見落としているものでなければなりませんが、次のページとJavaScriptを見て、なぜ神聖なものであれば、jQueryが真実を返さない理由を教えてください。同じ要素のjQueryオブジェクトが等しくないですか?

HTML:http://alcatel.scottbuckingham.com/reporting/test.html

<p class="test">hello1</p> 

JS:http://alcatel.scottbuckingham.com/reporting/_scripts/collapse.js

;(function($, window, document, undefined) { 

     var t = $('.test'); 
     var s = $('.test'); 

     console.log(t); 
     console.log(s); 

     if (t === s) { 
      console.log('yes'); 
     } 

})(jQuery, window, document); 

私は文字通りそれをうまくしようとしている時間を過ごし、動作しません。この、ほとんど1 === 1声明にそれを削減しました。

すべてのヘルプは高く評価されます!

+0

私は本当に今混乱しています。そのJavascriptでも動作しなければならない。それとも、誰かが私を何かに導いて、何が起こっているのか理解できるところにしてください。 –

+1

それは動作しますが、彼はjqueryオブジェクトとHTMLノードを比較していません。彼はhtmlを比較したいとき、2つの異なるjqueryオブジェクトです。 –

+0

私はJavaScriptを学ぶべきであることを指摘してくれてありがとうが、私は2つの違いをよく知っている。 _either_の場合、jQueryオブジェクトを比較するかどうかを判断するにはtrueを返します。 –

答えて

8

この試してみてください - A、あなたがこれを行うことができます>http://jsfiddle.net/mohammadAdil/tHjgN/1/

+0

ありがとう、何らかの理由で、私はjQueryが同じオブジェクトを比較させないことに気付かなかった。多分私はそれを以前に使ったことはないでしょう。それが私をここから捨てたものです。助けてくれてありがとう! –

+0

lolはAdil、Eruのおかげで参考になったことを忘れました – Geomorillo

1

- ワーキングデモ - >http://jsfiddle.net/mohammadAdil/tHjgN/

if(t.is(s)) { 
    console.log('yes'); 
} 

http://api.jquery.com/is/

それとも===

if (t.get(0) === s.get(0)) { //<--Compare DOM elements instead of jquery object's 
    console.log('again yes'); 
} 

とデモHTMLノードの比較。 HTMLオブジェクトを比較したい場合は、正しい方法です。

if (t[0] === s[0]) { 
    console.log('yes'); 
} 
+0

しかし、ポイントは次のとおりです。jQueryが要素を見つけたようにも見えません。このページには他に何もありません。この正確なコードでjsFiddleを作成するとうまくいきます。 –

+0

Chrome JSコンソールを使用すると、allrightとjqueryの各要素が、リンクをたどるときに、IIFEを使用していて、見つかったときに実行されるので、DOMの一番下に置くか、 '$(document) .ready() '。 –

2

jQuery メソッドを使用できます。

説明: セレクタ、要素、またはjQueryオブジェクトに対する要素の現在の一致セットをチェックし これらの元素のうちの少なくとも一方が指定された引数と一致する場合、真を返します。

if (t.is(s)) { 
    console.log('yes'); 
} 

例フィドル:http://jsfiddle.net/IrvinDominin/q86Sh/

1

あなたは<head>でスクリプトを持っていたが、要素<body><p class="test">hello1</p>

まず、$(document).ready()を使用して、コンテンツが読み込まれていることを確認してください。次に、.is()を使用して等しいかどうかを確認します。

$(document).ready(function() { 

     var t = $('.test'); 
     var s = $('.test'); 

     console.log(t); 
     console.log(s); 

     if (t.is(s)) { 
      console.log('yes'); 
     } 
}); 

は例withwithout.ready()機能を比較してください。

+0

いいえ;-)これは非常に有効なjQueryプラグインパターンです。参照:http://jqueryboilerplate.com/ –

+0

@ReinierKaperはい、そうです。更新された例を確認してください。 – Antony

+0

@ReinierKaperあなたが与えたリファレンスは、自分のHTMLページ内でjQueryを使用するのではなく、jQueryプラグイン(jQueryの拡張機能)を開発するためのものであることに注意してください。 – Cheekysoft

1

これはあなたを助けることができる:

var test = document.getElementById('test') //returns a HTML DOM Object 
var test = $('#test') //returns a jQuery Object 
var test = $('#test')[0] //returns a HTML DOM Object 

ので(limelightsはあなたに言ったように)この使用:

if (t[0] === s[0]) { 
    console.log('yes'); 
} 

また、あなたのコードの周りに

$(document).ready(function(){ 


}); 

を使用することをお勧めしますが。

関連する問題