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 と表示される。
なぜだ?
いろいろWEBを漁ってみたところ以下のような資料を発見した。
Index of the HTML 4 Attributes
表の左端(Name)列を下に探していき、「name」のあたりを参照してみると、divタグにname属性は定義されていない。
どうやら、本来、divタグにname属性は指定できないようだ。
知らなかった…。
そういう事なら仕方がないと思うのだけれど、どうしても name で引っかけたい。
なんとかならないだろうか。
いろいろ試行錯誤したところ、以下のセレクタであれば、ヒットさせる事ができた。
var aryItems;
aryItems = $('[name=HELLO_NAME]');
alert(aryItems.length)
どうしてこれならヒットするのかと、ちょっと納得いかないけれど、仕方がないと割り切る事にした。
広告








CAT EYE ECONOM Force HL-EL540






おでかけ (14)
オトコの料理 (62)
サイエンス (8)
システム (6)
ハードウェア (63)
ひとりごと (36)
ベランダ菜園 (12)
山歩き・滝巡り (50)
映画 (68)
自転車 (33)
読書 (278)
資格取得 (21)
趣味 (23)



