FireFox 및 Opera에서 오류가 발생했습니다. (데비안 Whezee, Firefox 9.0.1, Opera 11.60, Chrome 16.0.912.63) 다음과 같이 입력하면 :HTMLElement.toString()은 Chrome에서만 작동
이 같은 "[객체는 HTMLElement] 세계"를 얻을이 예상대로var a = document.createElement('a')
a.toString = function(){ return "Hello" }
alert(a+" World");
크롬에서 당신은 "안녕하세요"로 경고 상자를 얻을 것이다,하지만, 파이어 폭스와 오페라 (IE에 대해 알고하지 않습니다)
이 문제를 해결하기 위해 노력한 내용 :
Object.prototype.toString = function(){ return "Hello" };
Function.prototype.toString = function(){ return "Hello" };
(210)
DOM 요소 객체되지 않습니다 (객체 및 그 기능에서 상속하지 않음) 때문에 그것은 작동하지 않습니다 심지어이 도움이되지 않았다 :
HTMLElement.prototype.toString = function(){ return "Hello" };
Element.prototype.toString = function(){ return "Hello" };
Node.prototype.toString = function(){ return "Hello" };
는 HTMLElement, 요소, 노드는 모든 인터페이스이기 때문에와 기능이 아닙니다.
내 질문에이 오류를 어디에서보고 할 것입니까? 누군가 이걸로 나를 도울 수 있습니까?
// 편집
이 내 원래의 toString 기능입니다 : 당신이 볼 수 있듯이
var a = document.createElement('a');
a.toString = function(){
var tmp=document.createElement('div');
tmp.appendChild(this);
return tmp.innerHTML;
}
가 outerHTML에 대안 내가 라인을
다음의 기본 동작으로이 필요document.getElemntById('someID').innerHTML += "click this link:"+a;
결과는 다음과 같아야합니다.
<div id='someID'>click this link:<a></a></div>
누가 실수라고 말합니까? 분명히 파이어 폭스와 오페라는 DOM 노드의'toString'을 오버 라이딩 할 수 없다. 호스트 객체이기 때문에 ECMAScript 사양을 따르지 않으므로 완벽합니다. –
어쩌면 누군가가 비슷한 효과를 내기 위해 무엇을 할 수 있는지 알고 있습니다. 그 트릭을 수행 할 수있는 다른 방법을 오버라이드 할 수 있습니까? 매번 a.toString()을 사용하면 Chrome을 사용하고 다른 사용자가 Firefox 또는 Opera를 사용할 때 그다지 분명하지 않기 때문입니다. 나는 보통 "이상하게, 내 작품은 잘했다"고 말한 다음 필요하다면 .toString()을 자동으로 추가합니다. – fon60
질문은, 당신의'toString' 함수가 정확히 무엇을하기를 원합니까? 내부 텍스트를 얻고 싶다면'innerText' 나'textContent'를 사용해야합니다. 그것이 표준 방법입니다. –