.tagName
プロパティは直接要素に対して機能しますか? 子要素を出発点として使用して機能させてきましたが、直接の要素で機能させることはできません。
動作する例を次に示します。
HTML
<p>This is paragraph 1.</p>
<p>This is paragraph 2.</p>
<p>This is paragraph 3.</p>
<p>This is paragraph 4.</p>
<div>
<p id="foo">This is paragraph 5.</p>
</div>
JavaScript
(function(){
var el = document.getElementById("foo");
var name = el.parentNode.tagName;
alert(name);
}());
これにより div 要素の名前が取得され、これが私が達成したいことですが、より短い方法はありますか?
要素に識別子を追加してそのようにターゲットにしたくありません。これは、HTML ドキュメントに不要なマークアップを追加したくないためです。動作する例を次に示しますが、識別子に依存しています。
HTML
<p>This is paragraph 1.</p>
<p>This is paragraph 2.</p>
<p>This is paragraph 3.</p>
<p>This is paragraph 4.</p>
<div id="bar">
<p id="foo">This is paragraph 5.</p>
</div>
JavaScript
(function(){
var el = document.getElementById("bar");
var name = el.tagName;
alert(name);
}());
ご覧のとおり、これは望ましい効果ですが、識別子に依存しています。そこで私は、「.tagName
要素自体にプロパティを使用して、その要素を でターゲットにすることはできません.getElementsByTagName()
か?」と考えました。
HTML
<p>This is paragraph 1.</p>
<p>This is paragraph 2.</p>
<p>This is paragraph 3.</p>
<p>This is paragraph 4.</p>
<div>
<p id="foo">This is paragraph 5.</p>
</div>
JavaScript
(function(){
var el = document.getElementsByTagName("div");
var name = el.tagName;
alert(name);
}());
答えはノーだ。これは の値を取得しますundefined
。どうしてこれなの?誰にも解決策がありますか?
jsFiddle へのリンク: http://jsfiddle.net/BV5EP/