2016-07-07 10 views
-4

私は非常にシンプルなキャンバスメニューをjQueryで正常に機能させました。私はバニラのjavascriptで書き直そうとしています。jQueryを削除していますが、.className + =動作していませんか?

次のコードでは、addClass(jQuery)は動作していますが、.className + =は使用できません。

var burger = document.getElementsByClassName('l-burger'); 
var html = document.querySelectorAll('html'); 

$(burger).click(function(){ 
    $(html).className += ' menu-opening'; // not working 

    setTimeout(function(){ 
    $(html).addClass('menu-open'); 
    $(html).removeClass('menu-opening'); 
    }, 300); 
}); 
+0

*は、あなたが(jQueryの* "バニラはJavaScript" *で)直接DOMを使用して意味* 1 "イムはjavascriptのバニラでそれを書き換えしようとします"。 2.なぜあなたはまだjQueryを使用していますか? '$(html)'はjQueryを呼び出してjQueryオブジェクトを取得しています。 –

+0

** 1。**あなたはjQueryを置き換えると言いましたが、あなたは '$(html)'を使っています。 ** 2。**ドキュメントごとにただ一つの ''要素があるべきです。 'querySelectorAll'を使う必要はなく、代わりに' document.documentElement'を使います。 ** class3.example( 'someClassName') ' – haim770

+0

...' className + = "menu-opening"も動作しますが、あなたはnativeListへの参照を取得した方がよいでしょう。あなたは 'classList'を使いたくありません。最近の 'classList'のサポートはとても良いです。 –

答えて

2

$(html)は、ネイティブDOMElementではなくjQueryオブジェクトを提供するためです。

あなたはjQueryオブジェクトのキー0でネイティブの要素にアクセスすることができます

$(html).className += ' menu-opening'; 
0

用途:document.querySelector('html').className = document.querySelector('html').className + ' myClassName'

だから、クラス名を追加する

$(html)  // returns a jQuery object 
$(html)[0] // returns a native DOMElement 

、あなたはこのようなものを使用する必要があります

またはコメントに示唆されているとおり:

var htmlNode = document.querySelector('html'); 
htmlNode.className = htmlNode.className + ' myClassName' 

あるいはクリーナー:document.querySelector('html').classList.add('myClassname')

+2

DOMに2回クエリするのではなく、変数の要素への参照を保存する方がずっと効率的です。 – Schlaus

関連する問題