2016-04-11 12 views
1

2つのコードを考えてください。意図したとおり

1)動作:

$(function(){ 
    $('.menu li').on('click', function(){ 
    var choice = document.getElementById("choice"); 
    var text = this.textContent; 
     choice.textContent = text; 
    }); 
    }); 

2)ここで、$(this)は "未定義" スロー。

$(function(){ 
$('.menu li').on('click', function(){ 
var choice = document.getElementById("choice"); 
var text = $(this).textContent; 
    choice.textContent = text; 
}); 
}); 

私は、時間の長い期間のために選択された要素への参照として$(this)を使用してきました。しかし、今日は失敗しました。どうしましたか? $(this)を忘れて、シンプルコードの数行でこのようなケースに直面することはありませんか?

Codepen

+3

http://stackoverflow.com/questions/3633270/difference-between-this-and-this-in-jqueryあなたが使用する必要があり – Tinmar

+1

: 'VAR文= $(この)は.textを();': ) – Hackerman

答えて

2

.textContentは、a DOM propertyであり、jQueryのプロパティまたはメソッドではありません。このため、jQuery要素の$(this)には存在しません。

あなたはそのように、jQueryの要素のうち、実際のDOMプロパティを取得するために$(this)[0]を使用することができます。

var text = $(this)[0].textContent; 

をしかし$(this)[0]のでその具体的な例ではそうない点はありませんthisに相当します。これは、他のケースでは意味をなさないかもしれません - 例えば、あなたが関数の引数としてjQueryの要素を取得する場合:

を:あなたはまた、そのように、要素のテキストコンテンツを取得または設定し the jQuery method .text()を使用することができます

function set_text(jqElem,txt) { jqElem[0].textContent = txt; } 

var text = $(this).text(); 
+0

DOMのメソッドとjQueryメソッドの違いを誰かが忘れてしまった場合、これを$ this(これ)を使ってDOMメソッドとして使うと、混乱を避ける最良の方法でしょうか? –

+0

@ВладимирМаксименкоDOMとjQuery要素を混在させることは可能ですが、主流です。 多くの場合、jQuery要素は使いやすくなっています。しかし、単純なDOMプロパティが '.textContent'のように利用可能な場合、要素をjQuery要素としてラップするよりもはるかに高速です。この例では 'this.textContent'を使用します。なぜなら' this 'を '$(this)'でラップすると不要な処理が行われるからです。 – oriadam

0

$()jQueryのコンストラクタ関数です。

しかし、これは呼び出しのDOM要素への参照です。

$(this)、これをパラメータとして$()に渡すだけで、jQueryのメソッドと関数を呼び出すことができます。

関連する問題