0


0

このjavascriptコードがjQueryコードにジャンプするのはなぜですか? appendChildの競合?

このコードチャンクの下でjQueryを使用します(jQueryとして書き直します)。 jQueryがロードされます。 しかし、デバッガでこのコードをステップ実行すると、デバッガが指示された行でjQueryにジャンプし、「UL.appendChild」が関数ではないというエラーが表示される理由がわかりません。

 var Dialog = document.createElement('div').id='meta-dialog';
 var Tabs = document.createElement('div').id = 'meta-tabs';
 var UL = document.createElement('ul').id = 'meta-ul';


 var li1 =document.createElement('li'); li1.id = 'term1-LI';
 var li2 =document.createElement('li'); li2.id = 'term2-LI';

 var li1a = document.createElement('a');
 var li2a = document.createElement('a');

 li1a.href='#meta-tab1'; li1a.innerHTML = 'term1';
 li2a.href='#meta-tab2'; li2a.innerHTML = 'term2';

 li1.appendChild(li1a);
 li2.appendChild(li2a);

 UL.appendChild(li1) ;   // Firebug debugger jumps into jQuery here
 UL.appendChild(li2);

問題は誰にも明らかですか? これはjQueryとの競合ですか?

3 Answer


3


>>> var UL = document.createElement('ul').id = 'meta-ul';
>>> UL
"meta-ul"


2


// Here UL will be the id attribute, not the  element.
var UL = document.createElement('ul').id = 'meta-ul';

// this doesn't makes sense... (id.appendChild)
UL.appendChild(li1) ;

// solution:
var UL = document.createElement('ul');
UL.id = 'meta-ul';

そして、ダイアログとタブについても同じことが言えます。 (あなたのli1とli2は大丈夫です)

ああ、$で始まるものを使用していない限り、jQueryと競合することはできません。


-1


あなたの `UL`はjQuery要素オブジェクトではなく、単なるネイティブJavaScript要素です。 jQuery固有のメソッドを使用するには、jQueryの「$(UL)」で「UL」を取得する必要があります。