0

Ajax を使用して XML データを取得します。空白のテキスト ノードに関する質問

私はこの質問/回答をここで読みました Javascript/XML - ノード名の取得

これは、構造がどのように設定されているかについて多くのことを理解するのに役立ちましたが、まだ質問が1つか2つあります..彼がこの部分について言及したとき:

「改行といくつかのスペースまたはタブを含むテキスト ノード」

このような空のテキスト ノードを取得した場合、どのようにテストしますか? 私は見るためにテストを試みました:

if nodeValue == null
nodeValue == "null"
nodeValue == ""
nodeValue == " "

これらのどれも機能していないようです

長さが 0 になるかもしれないと考えたので、.length をテストしたところ、5 が返されました (1 つのリターン キーと 4 つのタブ..そこに余分なタブを追加し、再度テストすると 6 が返されました)。

次に、空白を削除する方法をグーグルで検索し、これらを使用しました:

.replace(/\s+/g, ' ');
.replace(/^\s+|\s+$/g, '');

どちらも機能せず、.length はまだ 5 であると言っていました

これをテストしたい理由は、事前に各要素ノード名を知らなかったり、DOM がどのように設定されているかを正確に知らなかったりした場合にどうなるかということです。

または、テキストノードが単なるタブ/スペース/リターンキーであるかどうかをわざわざ確認せずにナビゲートするより良い方法はありますか?

4

1 に答える 1

2

.replace(/^\s+|\s+$/g, '');スペース/タブが実際にはスペースやタブではなく、他のさまざまな Unicode スペースのような文字の 1 つでない限り機能します。だから、あなたはそれを正しく使っていなかったと思います。

これはそれを使用する方法です:

if (!textNode.nodeValue.replace(/^\s+|\s+$/g, '')) {
    // Node is empty
}

例:ライブコピー| ライブソース

var xml = parseXml("<test>\n\t\t\t</test>");
var textNode = xml.documentElement.firstChild;
display("textNode.nodeValue.length = " +
        textNode.nodeValue.length);
display('Is "empty"? ' +
        (!textNode.nodeValue.replace(/^\s+|\s+$/g, '')));

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}

出力:

textNode.nodeValue.length = 4
「空」ですか?真実

(この回答parseXMLはどこにありますか。)


しかし、実際には a を実行する必要はありませんreplace(ただし、実行のオーバーヘッドはわずかです)。このようなテストはそれを行います:

if (/^\s*$/.test(textNode.nodeValue)) {
    // The node is "empty"
}

その正規表現 (両端にアンカーを持つ 0 個以上の空白文字) は、既に空であるか、空白文字のみで構成される文字列にのみ一致します。

于 2013-06-22T22:10:13.637 に答える