2017-06-07 19 views
1

私は配列をループして画面に表示しています。しかし、私は問題があります。私は、テキストをクリックするとそのクリックされたテキストを削除する機能を追加しようとしました。私のコードは以下の通りです:配列のjavascriptから削除する

私がクリックすると、アレイから項目を削除してコンソールに記録します。しかし、それは画面に表示されません。どんな助け?

あなたはまた、HTML要素を削除することがあり、 スクラッチ猫

+2

なぜでしょうか?あなたは段落要素オブジェクトに触れません。 – Quentin

+1

"p"の内容を削除後に新しい配列に置き換える必要があります。 – Liquidchrome

+1

Is it it array.splice(i、1); ? –

答えて

1

あなたが行く:

var div = document.querySelector('div'); 
var array = [ 
"Banana", 
"Chocolate", 
"Oranges" 
]; 

for (let i = 0; i < array.length; i++) { 
    let p = document.createElement('p'); //note the block scoping 
    p.textContent = array[i]; 
    div.appendChild(p); 

    p.onclick = function() { 
    array.splice(array.indexOf(this), 1); //splice wants an index... 
    this.remove(); //remove el from document tree 
    console.log(array); 
    } 

} 

https://jsfiddle.net/wt0fux3f/6/

+0

私はそれを修正したことを心配しないでください。 p.remove()の代わりにthis.remove()を使用しました。ありがとうございました。 –

+0

@ScratchCatこの変更を反映するようにコードを更新しました。テキストコンテンツを取得していた変数を削除し、「this」も使用しました。 – Mike

0
for(let i = 0; i < array.length; i++){ 
let p = document.createElement('p');//note the block scoping 
p.textContent = array[i]; 
div.appendChild(p); 

p.onclick = function(){ 
    array.splice(i, 1);//splice wants an index... 
    p.remove();//remove el from document tree 
    console.log(array); 
} 

} 

をいただき、ありがとうございますか!ここで

+0

はい段落を削除しようとしましたが、動作しませんでした。それはちょうど最後の反復を削除しました。 –

+0

@Scratch Cat note line 2 ... p.remove()を使うときは、pがブロックスコープであることが重要です。代わりにthis.remove()を使用しても問題ありません。 –

1

あなたが近いように見えます。配列から要素を削除しましたが、DOMからは削除していません。そのため、htmlで更新された内容を見ることができません。

for(let i = 0; i < array.length; i++){ 
var p = document.createElement('p');//note the block scoping 
p.textContent = array[i]; 
div.appendChild(p); 

p.onclick = function(){ 
    array.splice(i, 1); 
    this.remove();//also remove from the DOM 
    console.log(array); 
} 

} 
+0

このクエストオンが解決されると、どこかに緑色のチェックマークが表示されます。しかし、2行目で私のコメントを引き継ぐことは意味をなさない(varは関数スコープです...) –

関連する問題