単純な JavaScript を使用することをお勧めします (ただし、関連するノード/要素を反復処理するために jQuery と組み合わせます)。以下はテストされていませんが、要点を理解していると思います。
function firstChildIs(el) {
if (!el) {
return false;
}
else {
switch (el.firstChild.nodeType) {
case 1:
return 'Element is an element';
break;
case 2:
return 'Element is an attribute node';
break;
case 3:
return 'Element is a textNode';
break;
case 4:
return 'Element is a CDATA section node';
break;
case 5:
return 'Entity reference node';
break;
case 6:
return 'entity node';
break;
case 7:
return 'processing instruction node';
break;
case 8:
return 'comment node';
break;
case 9:
return 'document node';
break;
case 10:
return 'document type node';
break;
case 11:
return 'document fragment node';
break;
case 12:
return 'document notation node';
break;
default:
return 'Something horrible has probably happened...';
break;
}
}
}
そして、次のように呼び出します。
$(elementSelector).each(
function(){
console.log(firstChildIs(this));
});
スイッチを使用するよりも配列を使用する方が簡単かもしれないと思ったので編集しました:
function firstChildIs(el) {
if (!el) {
return false;
}
else {
var nodetypes = ['element', 'attribute', 'text',
'CDATA section', 'entity reference',
'entity', 'processing instruction',
'comment', 'document', 'document type',
'document fragment', 'document notation'];
return nodetypes[el.firstChild.nodeType - 1] || 'something really unexpected happened';
}
}
前に示したのと同じ方法で呼び出します。「node」という単語を追加する場合は、関数によって返される値に忘れずに追加してください。
一部の (すべてではないと思いますが) ブラウザーは、開始タグ間の空白 (改行とタブ) をテキストノードとして報告することも覚えておく価値があります。 firstChild
- の node-typeを評価する前のスペース。
参考文献: