FireFoxとOperaでエラーが発生しました(私はDebian Whezee、Firefox 9.0.1、Opera 11.60、Chrome 16.0.912.63を実行しています) :Chromeの場合HTMLElement.toString()はChromeでのみ動作します
var a = document.createElement('a')
a.toString = function(){ return "Hello" }
alert(a+" World");
あなたが期待どおりには「Hello World」ので警告ボックスを取得しますが、Firefoxとオペラ(IEのことは知らない)で、あなたはこの「[オブジェクトのHTMLElement]世界」のような何かを得る
私はこれを解決しようとしました:
Object.prototype.toString = function(){ return "Hello" };
Function.prototype.toString = function(){ return "Hello" };
DOM要素が対象でない(オブジェクトとそのための機能を継承していない)ので、それが動作しないとさえこれは助けにはならなかった。
HTMLElement.prototype.toString = function(){ return "Hello" };
Element.prototype.toString = function(){ return "Hello" };
Node.prototype.toString = function(){ return "Hello" };
のHTMLElement、要素、ノードは、すべてのインターフェイスであるためと機能ではありません。
ここで私の質問は、この間違いを報告する場所ですか?誰かがこれで私を助けることができますか?
//編集
これが私の元のtoString関数です:あなたは、これがouterHTMLに代わるものであると私はライン
を以下にデフォルトの動作として、これを必要と見ることができるようにvar a = document.createElement('a');
a.toString = function(){
var tmp=document.createElement('div');
tmp.appendChild(this);
return tmp.innerHTML;
}
document.getElemntById('someID').innerHTML += "click this link:"+a;
結果は次のようになります。
<div id='someID'>click this link:<a></a></div>
誰が間違いだと言っていますか?どうやら、FirefoxとOperaはDOMノードの 'toString'をオーバーライドすることはできません。それらはホストオブジェクトなので、ECMAScript仕様の対象ではないため、完璧です。 –
だから、誰かが私が何をして同様の効果を得ることができるかを知っているかもしれない。そのトリックを行うことをオーバーライドする他の方法はありますか?なぜなら、私がChromeを使用していて、他の人がFirefoxやOperaを使用しているときには、毎回a.toString()を使用することは明らかではないからです。私は通常、「奇妙な、私の作品は大丈夫です」と言い、必要に応じて.toString()を静かに追加します。 – fon60
質問は、あなたの 'toString'関数が何をしたいのですか?本当に内側のテキストだけを取得したい場合は、 'innerText'または' textContent'を使用してください。それが標準的な方法です。 –