jQueryの filter() で小ハマリ

jQueryの filter() で小ハマリしたのでメモ。

jQueryで filter() を使用した時に、「div」「span」などのタグに記述した name 属性の値が参照できないという現象に遭遇した。
たとえば、以下のようなHTMLがあるとする。

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" SRC="jquery-1.10.2.min.js"></SCRIPT>
</HEAD>
<BODY>
<DIV NAME="HELLO_NAME" ID="HELLO_ID">Hello,World!</DIV>
</BODY>
</HTML>

これに対して、以下のjQueryのコードを実行してみる。

<SCRIPT LANGUAGE="JavaScript">
var aryItems;
aryItems = $('*').filter
(
    function ()
    {
        return (('name' in this) == true) ? this : null;
    }
);
alert(aryItems.length);
</SCRIPT>

このフィルターでは、name属性を持つ、すべての要素を取得しているはずなので、最後にダイログで表示される値は「1」を期待している。
ところが、実際に実行すると、なぜか「0」と表示される。
なぜだ?

filter() の関数内で以下の alert() を挿入してみる。

alert('NAME=' + this.name + '\nID=' + this.id);

id属性は取得できるが、name属性は undefind と表示される。

name属性はundefined

なぜだ?

いろいろWEBを漁ってみたところ以下のような資料を発見した。

Index of the HTML 4 Attributes

表の左端(Name)列を下に探していき、「name」のあたりを参照してみると、divタグにname属性は定義されていない。
どうやら、本来、divタグにname属性は指定できないようだ。
知らなかった…。

そういう事なら仕方がないと思うのだけれど、どうしても name で引っかけたい。
なんとかならないだろうか。
いろいろ試行錯誤したところ、以下のセレクタであれば、ヒットさせる事ができた。

var aryItems;
aryItems = $('[name=HELLO_NAME]');
alert(aryItems.length)

どうしてこれならヒットするのかと、ちょっと納得いかないけれど、仕方がないと割り切る事にした。

広告

トラックバック 
〔https://blog2.zunbe.com/wp/wp-trackback.php?p=2801〕

    トラックバックはありません。

コメント

    コメントはありません。

コメントしてください

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


広告

まとめページ

取得した資格
登った山

広告

サイト内検索

WordPress

最近のコメント

広告

RSS

RSS 記事
RSS コメント
Server offered by
有限会社パテンティックソフトウェア
Profile for zunbe