「その2」なんて予定外ですが、脱線しすぎてしまったためにページを分けます。サンプルが重複するのを避けるためでもありますが。ここまで来たら、Mozillaについても脱線してみます。
IEは散々叩きました。次はMozillaです。accesskey属性を取り除いたり、その値を取り除いたりしても、全く反映されないのはどうしたことでしょうか。
もう一度、こんどはDOM1で行える全ての方法で試してみます。結構たくさんの方法があるんですね。これが。
<li><a href="#" accesskey="B" id="back">[B]ack</a></li>
var obj = document.getElementById('back');
function trySetAttributeMethod(){
obj.setAttribute('accesskey', '');
}
function tryRemoveAttributeMethod(){
obj.removeAttribute('accesskey');
}
function tryRemoveAttributeNodeMethod(){
obj.removeAttributeNode('accesskey');
}
function tryRewritingAccessKeyProperty(){
obj.accessKey = '';
}
function tryRemoveNamedItemMethod(){
obj.attributes.removeNamedItem('accesskey');
}
function tryRewriteAttrNodeValue(){
obj.attributes.getNamedItem('accesskey').nodeValue = '';
}
DOM1をフルサポートするMozillaには、6つもの手段がありながら、どれもアクセスキーを無効にすることはできませんでした。私は、「馬鹿は死ななきゃ直らない」を連想しました。このA要素は、一回死ななければAccesskeyを手放しません。それともイベントオブジェクトが関係しているのでしょうか。
やはり、Mozillaに関してはcloneNodeで複製したものに対してこれらの処理を施した後、置き換える必要があるようです。IE6は色々で可能です。
function deleteAttribute(attr){
var _clone = obj.cloneNode(true);
_clone.removeAttribute(attr);
obj.parentNode.replaceChild(_clone, obj);
}
accesskeyのKを大文字にすれば、IEにも使えます。
なんか疲れたので、続きはまたいつか。