나는 모든 사람들이 dom 객체의 내부 html 속성에 익숙하다고 생각하지만 Outerhtml은 덜 사용된다고 생각합니다. innerHTML 속성은 DOM 객체에 포함 된 HTML을 시작 태그에서 끝 태그로 반환하는 반면 OUTERHTML 속성은 DOM 객체의 태그를 포함하여 HTML을 반환합니다. 다음 수치는 두 속성의 차이를 잘 설명 할 수 있습니다.
Outerhtml은 처음에 IE에 속하는 사유지입니다. MSDN : outerhtml 속성 (http://msdn.microsoft.com/en-us/library/ms534310(vs.85).aspx에서 설명을 볼 수 있습니다. 현재 IE, Chrome, Safari 및 Opera는이 속성을 지원할 수 있습니다. OUTERHTML이 Firefox를 지원하지 않는 이유는이 속성이 항상 Firefox에서 정의되지 않은 리턴을 반환합니다. HTML5 가이 속성을 추가 할 것이라는 것은 만족 스럽습니다.
Firefox를 지원하는 Outerhtml 속성을 HTMLELEMENT 프로토 타입을 확장하여 구현하도록하십시오.
코드 사본은 다음과 같습니다.
if (typeof (htmlelement)! = "undefined") {
htmlelement.prototype .__ definesetter __ ( "auterhtml", function (s) {
var r = this.ownerDocument.CreateRange ();
R.SetStartBefore (this);
var df = R.CreateContextualFragment (들);
this.parentNode.replacechild (df, this);
반환 s;
});
htmlelement.prototype .__ definegetter __ ( "Outerhtml", function () {
var a = this.attributes, str = "<"this.tagname, i = 0;
for (; i <a.length; i)
if (a [i]. 지사)
str = ""호르미 dans les 기계 A는 우주를 선호합니다. res jeux par exames grandes six roues, pai go poker, blackjack, baccarat, la <a href = "http://topcasinosenosenligne.com/la-roulette"> roulette </a> et le autres. a [i] .name "=" "a [i] .value" "";
if (! this.canhavechildren)
return str " />";
return str ">"this.innerhtml "<!-"this.tagname "->";
});
htmlelement.prototype .__ definegetter __ ( "canhavechildren", function () {
반품
!/^(면적 |베이스 |베이스 폰트 |
col | 프레임 | hr | img | br |
입력 | isindex | 링크 | 메타
| param) $/. test (this.tagname.tolowercase ());
});
}
이 방법은 w3help (http://www.w3help.org/zh-cn/causes/sd9017)에서 나옵니다.이 방법은 약간 번거롭고 프로토 타입에 침입이 필요합니다. 더 간단한 대안도 있습니다. 먼저 빈 노드를 작성하고 DOM 객체를 추가 하여이 빈 노드에 Outerhtml 속성을 얻은 다음이 빈 노드의 내부 html에 액세스하십시오.
코드 사본은 다음과 같습니다.
함수 auterhtml (elem) {
if (Elem === "String") Elem = Document.getElementById (elem);
// 빈 DIV 노드를 만듭니다
var div = document.createelement ( "div");
// 복사 된 elemcopy를 빈 DIV 노드에 삽입
Div.AppendChild (Elem.Clonenode (True));
// div의 HTML 내용을 반환합니다
반환 Div.innerhtml;
};
위의 방법에 비해 프로토 타입을 이동할 필요가 없으며 코드의 양이 훨씬 작습니다. 다른 솔루션이있을 것이라고 생각합니다.