2017-08-31 10 views
0

特定のタグを持つ要素のリストを取得し、複数のループがあり、追加の要素を削除する場合は、重複するページ要素の削除 - Javascript

if (document.getElementsByName("description")[0]) { 
    document.getElementsByName("description")[0].setAttribute("content", "My Description"); 
} else { 
    var meta = document.createElement('meta'); 
    meta.name = "description"; 
    meta.content = "My Description"; 
    document.getElementsByTagName('head')[0].appendChild(meta); 
} 

しかし、私は最初の要素の後にあるものを削除する:

現在、私はいますか?どうすればいい?

+0

を使用するには、ループあなたの問題ですか、それは要素を削除する方法についてですか?あなたはこれを解決しようとしましたか? –

答えて

1

あなたはこれを行うことができます。

[...document.getElementsByTagName('span')].slice(1).forEach(e=>e.parentNode.removeChild(e)); 
[...document.getElementsByTagName('div')].slice(1).forEach(e=>e.parentNode.removeChild(e)); 

まず、特定のタグ名を持つすべての要素を選択します。それを配列に変換してください(この場合はスプレッド演算子で、[].slice.call(...)も使用できます)。その後、その配列のsliceを呼び出して、このセットの最初のものを取り除くことができます。 :)初心者のための

EDITソリューション:。

var elements = document.getElementsByTagName('span'); 
for(var i=elements.length-1;i>0;i--) 
    elements[i].parentNode.removeChild(elements[i]); 
+0

初心者のためのソリューションは動作しません、 'getElementsByTagName'はライブHTMLCollectionを返します。そのため、DOMから要素が削除されるとすぐに' elements'からも削除されるので、複数の要素をスキップします方法。 –

+0

あなたはとても正しい@ t.nieseです。私の悪い。それを私が直した。今は期待どおりに動作します。私はこの問題をあまりにも遅く思い出し、修正するのを忘れてしまった。 –

0

あなたは[0]ヘッダに、あなたが使用することができます説明の後に何をカットしたい場合はその 「document.getElementsByTagName [ "ヘッド"] innerHTMLプロパティ= ";"

あなただけの任意の説明タグをカットしたい場合は、

var tags = document.getElementsByTagName('description'); 
for(i=0; i<tags.length; i++){ 
    tags[i].remove(); 
} 
+0

あなたの提案をお試しくださいましたか?まず第一に、これは 'document.getElementsByTag ['description']'が 'undefinedのプロパティ記述を読み込めません 'という理由で実行されません。それを 'document.getElementsByTagName( 'description')'に変更すると 'for .. in'が' length'を繰り返し処理するため、まだ動作しません。また、 'getElementsByTagName'はライブHTMLCollectionを返しますので、要素をスキップしてもはや存在しないキーにアクセスします。 –

+0

はい、私は自分が書いているものに注意を払っていませんでしたが、解決策が見つかったにもかかわらずすぐに修正しました。 – Chr

関連する問題