Parse HTML | Find Closing Tag | Attributes |
Attributeをパースする
次のコードはあるタグ内のすべてのAttributeのKeyとValue
を列記するスニペットである。
<script>
function printAllAttributes(el){
for(let i=0;i<el.attributes.length;i++){
let name=el.attributes[i].name;
let value=el.attributes[i].value;
if(value===""){value="(EMPTY)";}
console.log(name,",",value);
}
};
const el_test=document.getElementById("test");
printAllAttributes(el_test);
</script>
まずは手始めにシンプルなケースを試してみる。
<span id=test aaa=bbb あああ=いいい>
以下のようになる。
id, test
aaa, bbb
あああ, いいい
checkedを入れてみた。
<span id=test aaa=bbb checked>
以下のようになる。
id, test
aaa, bbb
checked, (EMPTY)
Valueが宣言されていない場合、Valueは、(EMPTY) string
になる。
このタグでは、
<span id=test a " ' ` ~ ! @ # $
% ^ & * ( ) - _ = + { }
[ ] / | ; : ? / , . <>
以下にようなattributesになる
id , test
a , (EMPTY)
" , (EMPTY)
' , (EMPTY)
` , (EMPTY)
~ , (EMPTY)
! , (EMPTY)
@ , (EMPTY)
# , (EMPTY)
$ , (EMPTY)
% , (EMPTY)
^ , (EMPTY)
& , (EMPTY)
* , (EMPTY)
( , (EMPTY)
) , (EMPTY)
- , (EMPTY)
_ , +
{ , (EMPTY)
} , (EMPTY)
[ , (EMPTY)
] , (EMPTY)
| , (EMPTY)
; , (EMPTY)
: , (EMPTY)
? , (EMPTY)
, , (EMPTY)
. , (EMPTY)
< , (EMPTY)
> 以外の文字なら、なんでもKeyになれるようである。
= が _ と + をKey-Valueペアにしているところに注目。
改行とスペースは同じWhiteSpaceとして取り扱われている。
= を3つ並べたらどうなるか?
<span id=test ===>
id, test
= , =
最初の=がKeyになり、最後の=がValueとなり、
真ん中の=がKeyとValueをペアにする。
Keyがquoteされたらどうなるのか?
<span id=test "aaa"="bbb">
以下のようになる。
id, test
"aaa", bbb
"aaa" は、両脇のquoteがKeyの名前の一部になっている。
以下のように、Keyと=の間にWhitespace、=とValueの間に
Whitespaceがあっても問題なく、Key-Valueペアができる。
<span id=test aaa
=
"bbb">
結果:
id, test
aaa, bbb
以下のように、=を最初の文字に持った文字列がKeyになれてしまう。
<span id=test =ttt>
結果:
id, test
=ttt, (EMPTY)
""の後にスペースがなく、次の文字列がある場合でもOK
<span id=test aaa="bbb"ccc>
id, test
aaa, bbb
ccc, (EMPTY)