私はJavascriptで名前のリストを管理しています。チェックボックスをオンにすると、あなたの名前がリストに表示されます。チェックを外すと消されます。ボックスを不定状態にすると、名前が削除されます。
非表示の div に現在ログインしているユーザーの名前があります。名前は、スタイル属性を持つスパンです。
isEqualNode を使用して、名前が既にリストにあるかどうかを確認します。ページがロードされたときにリストにある場合は、正常に機能します。名前が見つかったため、ボックスのチェック状態が変わると更新されます。
for(var i=0 ; i < bullet.childNodes.length ; i++) {
var node = bullet.childNodes[i];
if(node.className == 'crossed')
node = node.firstChild;
if(node.isEqualNode(document.getElementById('curUser').firstChild))
break;
}
// if i < bullet.childNodes.length, then we found the user's name in the list
名前がリストにない場合は、スパンを複製します。
var newName = document.getElementById('curUser').firstChild.cloneNode(true);
bullet.appendChild(newName);
これは視覚的に機能します。
しかし、私は何かトリッキーなことに出くわしました: それnewName.isEqualNode(document.getElementById('curUser').firstChild)
は誤りです! そのため、ボックスの状態が再び変化した場合、新しく追加された名前は見つからず、新しい名前が再び作成されます。
スパンは次のようになります。
<span style="font-weight: bold ; color: #003380 ;">Pikrass</span>
今のところ、チェックの厳密性を下げます (isEqualNode に頼るのではなく、スパン内のテキスト データをチェックするだけです)。 isEqualNode.
関連する仕様: cloneNode、isEqualNode
編集: Firefox と Chromium でテストしました。Firefox では isEqualNode は false を返しますが、Chromium では true を返します。これを指摘してくれたフェリックスに感謝します。