1

ドキュメントから XML 要素を削除する際に問題が発生しています。私はフォーラムを検索しましたが、私は適切に物事を行っていると思います。

ループしている ID を含む配列があります。そのループ内で、XML ドキュメントをループして、"myId" 属性が配列と同じ ID を持つ要素を見つけます。見つけたら、その要素を XML ドキュメントから削除したいと思います。

これが私のコードです:

var xmlFilename=document.getElementById('xmlFilename').value;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }

    xmlhttp.open("GET",xmlFilename,false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;

    // lets get all the xml elements into xAll
    var xAll=xmlDoc.getElementsByTagName('*');
    // lets use the buttonList array - this corresponds to the elements in the xml to hide

    for (var i=0; i<buttonList.length;i++) {
        alert ("Looking for "+buttonList[i]);
        //find the XML node with the same id
        for(var j=0;j<xAll.length;j++) {
            y=xAll[j];
            if (y.getAttribute('myId')==buttonList[i]) {
                alert('Found a match');
                xmlDoc.documentElement.removeChild(y);
                alert('removed');
            } 
        }
        alert('next!');
    }
    alert('all done');

期待どおりにループしますが、一致するものが見つかると、xmlDoc.documentElement.removeChild(y); 行により、スクリプトは失敗し、「削除」状態にはなりません。

正しい方向へのヘルプ/ポインターに感謝します。

ありがとう、マーク

4

2 に答える 2

0

試す:

var i = 0, j, y;
for (; i < buttonList.length; i += 1) {
  // Running "backwards" is done on purpose, as `xAll` is a "live" NodeList.
  // If otherwise, you'd run into problems regarding wrong indexes. 
  for(j = xAll.length - 1; j >= 0; j -= 1) {
    y = xAll[j];
    if (y.getAttribute('myId') == buttonList[i]) {
      y.parentNode.removeChild(y);
    } 
  }
}
于 2012-11-09T12:30:37.957 に答える
0

getElementsByTagNameドキュメント要素の直接の子だけでなく、DOM ツリーのすべてのレベルで要素を見つけることができます。から削除しようとするのではなく、y の親ノード (ドキュメント要素であるか、ツリーの下の方にある可能性があります) を取得yし、そこから削除する必要があります。documentElementy

于 2012-11-09T12:15:27.293 に答える