「上記のアラートでは、正確にhref
as "http://my.domain/open.this.page"
.
これは予期されていることですか、それともあるブラウザーでは取得できますが、別のブラウザーでは取得できない可能性がありますか?」
これは予期されることです。"http://my.domain/open.this.page"
アラートが表示される理由は、それが要素のデフォルト.toString()
値であるためです。<a>
異常なケースです。他の要素は、表現として属性を示しません.toString()
。
を実際に使用したい場合はhref
、 を実行するかthis.toString()
、以下を参照してください...
「...たとえば、アンカーの REL または TITLE 部分を取得するにはどうすればよいでしょうか?」
他の属性やプロパティを取得するには、通常の方法で行います。
属性を取得するには、次のようにします。
onclick="doStuff(this.getAttribute('title')); return false;"
ほとんどの標準アトリビュートはノードのプロパティに直接マップされるため、次のようにすることもできます。
onclick="doStuff(this.title); return false;"
または、インラインハンドラーにいるので、実際にこれを行うことができます:
onclick="doStuff(title); return false;"
最後のものが機能する理由は、属性から割り当てられたハンドラーが、要素自体を含む一意のスコープ チェーンを持っているためです。これは、要素のプロパティが実際に変数として表示されることを意味します。
これは、他の種類のイベント ハンドラーでは機能しないことに注意してください。
に関してthis
は、ハンドラがバインドされている要素を参照します。
属性に何が起こるかというと、それは基本的に、onclick
プロパティに割り当てられた関数の本体になります。
したがって、次のような結果になります。
elem.onclick = function(event) {
doStuff(this);return false; // Your onclick attribute value
}
したがって、this
実際には、プロパティに割り当てられたイベント ハンドラーで見つかった通常の値であることがわかります。
event
パラメータが定義されていることにも注意してください。これは、次のように属性を変更できることを意味します。
onclick="doStuff(this, event);return false;"
...そして、関数が次のようになるため、そのパラメーターが渡されます。
elem.onclick = function(event) {
doStuff(this, event);return false; // Your onclick attribute value
}
event
したがって、文字列が実際に関数の通常のパラメーターを参照していることがわかります。
これは、古い IE でも機能します。IE では、event
パラメーターは定義されないため、グローバルevent
オブジェクトが取得されます。
// ---------------v----no parameter
elem.onclick = function() {
// v---now it picks up the global event
doStuff(this, event);return false; // Your onclick attribute value
}