私はこれを行うにはjQueryを使用してきた:ループ - JSだけ
$element.find("*").each(function() {
var $this = $(this);
$this.removeAttr("style width align");
if ($this.is("embed")) {
$element.append("<div class='video'></div>");
$this.attr("width", 640).attr("height", 360).parent().appendTo("#" + element + " .video");
};
});
しかし、私はループのために、単純なと比較すると、jQueryの.each()
方法が非常に遅いことを読んでいます(jsPerf)。私の質問は、純粋なJSでこれをどうやって模倣できるのでしょうか? div
内のすべての要素を見つけて、ノードをループします。
私はこれを検索しようとしましたが、どこでもjQueryの回答が見つかりました。
私は他のものを試してみたが、これは私がすべての子孫を選択することになったほど近かった:
var children = document.getElementById('id').getElementsByTagName('*');
for(var i = 0; i<children.lengtth; i++){
children[i].removeAttribute("style");
console.log(children[i]);
}
のjQueryの存在理由は、あなたが本当にDOMを反復処理したいん...これは...それが遅くなることがあります(気か...)しかし、それはすべてのブラウザで動作します正確ですツリーを作成し、それをすべてのブラウザで動作させますか? – Rufinus
[] .slice.call(elm.children)は要素の子の配列を返し、[] .slice.call(elm.childNodes)はテキストノードを含みます。getElementsByTagName()は直接子供よりも深くなります。 – dandavis
あなたのバニラJSソリューションで何が問題になっていますか? –