6

DOM を使用して最初liのものを削除しようとしています。しかし、何らかの理由で機能しません。olremoveChild()

これは私のJavaScriptです:

document.getElementById('queue').removeChild(
    document.getElementById('queue').childNodes[0]
);

そして、これは私のHTMLです:

<ol id="queue">
    <li>Surprised Kitty (Original)<span class="nodisplay">0Bmhjf0rKe8</span></li></ol>

オブジェクトだけを期待していたのに、少し奇妙に思えますchildNodes[0][Object Text]

私がはっきりしていることを願っています。

4

5 に答える 5

12

このワンライナーを試してください:

document.getElementById('queue').removeChild(document.getElementById('queue').getElementsByTagName('li')[0]);

拡張説明付き:

var queue = document.getElementById('queue'); // Get the list whose id is queue.
var elements = queue.getElementsByTagName('li'); // Get HTMLCollection of elements with the li tag name.
queue.removeChild(elements[0]); // Remove the child from queue that is the first li element. 
于 2013-01-12T15:00:24.593 に答える
7

<ol id="queue">とタグの間に<li>はスペースと改行があります。これらはテキスト ノードを構成します。したがって、要素の最初の子は#queueテキスト ノードです。

.childrenの代わりにプロパティを使用できます。要素ノードのみを考慮するか、dystroy で提案されているように、最初のノード.childNodesが見つかるまですべての子ノードを反復処理します。li

于 2013-01-12T14:59:35.790 に答える
3

キューに含まれるすべてのリストを削除します。

var list=document.getElementById('queue');

list.removeChild(list.getElementsByTagName('li')[0]);
于 2013-01-12T15:02:20.347 に答える
3

子ノードは、考える要素だけでなく、テキスト ノードでもあります。ノードを繰り返し処理して、最初の を削除できますLI

var p = document.getElementById('queue');
for (var i=0; i<p.childNodes.length; i++) {
   if (p.childNodes[i].tagName=='LI') {
       p.removeChild(p.childNodes[i]);
       break;
   }
}

デモンストレーション

これは、最も実用的な解決策というよりも説明であることに注意してください。Javascript にはgetElementsByTagNameなど、他の反復ソリューションがあるため、次のようにすることができます。

var p = document.getElementById('queue');
p.removeChild(p.getElementsByTagName('li')[0]);

デモンストレーション

于 2013-01-12T14:58:33.367 に答える