<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鄧華

    BlogJava 聯系 聚合 管理
      48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks

    /**
    ?*?? 兼容firefox的 outerHTML? 使用以下代碼后,firefox可以使用element.outerHTML
    ?**/

    if(window.HTMLElement) {
    ??? HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
    ??????? var r=this.ownerDocument.createRange();
    ??????? r.setStartBefore(this);
    ??????? var df=r.createContextualFragment(sHTML);
    ??????? this.parentNode.replaceChild(df,this);
    ??????? return sHTML;
    ??????? });

    ??? HTMLElement.prototype.__defineGetter__("outerHTML",function(){
    ??? ?var attr;
    ??????? var attrs=this.attributes;
    ??????? var str="<"+this.tagName.toLowerCase();
    ??????? for(var i=0;i<attrs.length;i++){
    ??????????? attr=attrs[i];
    ??????????? if(attr.specified)
    ??????????????? str+=" "+attr.name+'="'+attr.value+'"';
    ??????????? }
    ??????? if(!this.canHaveChildren)
    ??????????? return str+">";
    ??????? return str+">"+this.innerHTML+"</"+this.tagName.toLowerCase()+">";
    ??????? });
    ???????
    ?HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
    ??switch(this.tagName.toLowerCase()){
    ??????????? case "area":
    ??????????? case "base":
    ???????? case "basefont":
    ??????????? case "col":
    ??????????? case "frame":
    ??????????? case "hr":
    ??????????? case "img":
    ??????????? case "br":
    ??????????? case "input":
    ??????????? case "isindex":
    ??????????? case "link":
    ??????????? case "meta":
    ??????????? case "param":
    ??????????? return false;
    ??????? }
    ??????? return true;

    ???? });
    }


    測試有效.




    關于insertAdjacentHTML兼容的解新決辦法

    //---在組件最后插入html代碼
    function InsertHtm(op,code,isStart){
    if(Dvbbs_IsIE5)
    op.insertAdjacentHTML(isStart ? "afterbegin" : "afterEnd",code);
    else{
    var range=op.ownerDocument.createRange();
    range.setStartBefore(op);
    var fragment = range.createContextualFragment(code);
    if(isStart)
    op.insertBefore(fragment,op.firstChild);
    else
    op.appendChild(fragment);

    }
    }







    ?

    關于inner/outerHTML在NC6中的參考

    DOM level 1 has no methods to allow for insertion of unparsed HTML into 
    the document tree (as IE allows with insertAdjacentHTML or assignment 
    to inner/outerHTML).
    NN6 (currently in beta as NN6PR3) know supports the 
      .innerHTML
    property of HTMLElements so that you can read or write the innerHTML of 
    a page element like in IE4+.
    NN6 also provides a DOM level 2 compliant Range 
    object to which a
      createContextualFragment('html source string')
    was added to spare DOM scripters the task of parsing html and creating 
    DOM elements.
    You create a Range with
      var range = document.createRange();
    Then you should set its start point to the element where you want to 
    insert the html for instance
      var someElement = document.getElementById('elementID');
      range.setStartAfter(someElement);
    Then you create a document fragment from the html source to insert for 
    example
      var docFrag = 
        range.createContextualFragment('<P>Kibology for all.</P>');
    and insert it with DOM methods
      someElement.appendChild(docFrag);
    
    The Netscape JavaScript 1.5 version even provides so called setters for 
    properties which together with the ability to prototype the DOM 
    elements allows to emulate setting of outerHMTL for NN6:
    
    <SCRIPT LANGUAGE="JavaScript1.5">
    if (navigator.appName == 'Netscape') {
      HTMLElement.prototype.outerHTML setter =
        function (html) {
          this.outerHTMLInput = html;
          var range = this.ownerDocument.createRange();
          range.setStartBefore(this);
          var docFrag = range.createContextualFragment(html);
          this.parentNode.replaceChild(docFrag, this);
      }
    }
    </SCRIPT>
     
    If you insert that script block you can then write cross browser code 
    assigning to
      .innerHTML
      .outerHTML
    for instance
       document.body.innerHTML = '<P>Scriptology for all</P>';
    which works with both IE4/5 and NN6.
    
    The following provides getter functions for 
      .outerHTML
    to allow to read those properties in NN6 in a IE4/5 compatible way. 
    Note that while the scheme of traversing the document tree should point 
    you in the right direction the code example might not satisfy your 
    needs as there are subtle difficulties when trying to reproduce the 
    html source from the document tree. See for yourself whether you like 
    the result and improve it as needed to cover other exceptions than 
    those handled (for the empty elements and the textarea element).
    
    <HTML>
    <HEAD>
    <STYLE>
    
    </STYLE>
    <SCRIPT LANGUAGE="JavaScript1.5">
    var emptyElements = {
      HR: true, BR: true, IMG: true, INPUT: true
    };
    var specialElements = {
      TEXTAREA: true
    };
    HTMLElement.prototype.outerHTML getter = function () {
      return getOuterHTML (this);
    }
    function getOuterHTML (node) {
      var html = '';
      switch (node.nodeType) {
        case Node.ELEMENT_NODE:
          html += '<';
          html += node.nodeName;
          if (!specialElements[node.nodeName]) {
            for (var a = 0; a < node.attributes.length; a++)
              html += ' ' + node.attributes[a].nodeName.toUpperCase() +
                      '="' + node.attributes[a].nodeValue + '"';
            html += '>'; 
            if (!emptyElements[node.nodeName]) {
              html += node.innerHTML;
              html += '<\/' + node.nodeName + '>';
            }
          }
          else switch (node.nodeName) {
            case 'TEXTAREA':
              for (var a = 0; a < node.attributes.length; a++)
                if (node.attributes[a].nodeName.toLowerCase() != 'value')
                  html += ' ' + node.attributes[a].nodeName.toUpperCase() +
                          '="' + node.attributes[a].nodeValue + '"';
                else 
                  var content = node.attributes[a].nodeValue;
              html += '>'; 
              html += content;
              html += '<\/' + node.nodeName + '>';
              break; 
          }
          break;
        case Node.TEXT_NODE:
          html += node.nodeValue;
          break;
        case Node.COMMENT_NODE:
          html += '<!' + '--' + node.nodeValue + '--' + '>';
          break;
      }
      return html;
    }
    
    </SCRIPT>
    </HEAD>
    <BODY>
    <A HREF="javascript: alert(document.documentElement.outerHTML); void 0">
    show document.documentElement.outerHTML
    </A>
    |
    <A HREF="javascript: alert(document.body.outerHTML); void 0">
    show document.body.outerHTML
    </A>
    |
    <A HREF="javascript: alert(document.documentElement.innerHTML); void 0">
    show document.documentElement.innerHTML
    </A>
    |
    <A HREF="javascript: alert(document.body.innerHTML); void 0">
    show document.body.innerHTML
    </A>
    <FORM NAME="formName">
    <TEXTAREA NAME="aTextArea" ROWS="5" COLS="20">
    JavaScript.FAQTs.com
    Kibology for all.
    </TEXTAREA>
    </FORM>
    <DIV>
    <P>
    JavaScript.FAQTs.com
    </P>
    <BLOCKQUOTE>
    Kibology for all.
    <BR>
    All for Kibology.
    </BLOCKQUOTE>
    </DIV>
    </BODY>
    </HTML>
    
    Note that the getter/setter feature is experimental and its syntax is 
    subject to change.








    ?

    HTMLElement.prototype.innerHTML setter = function (str) {
    var r = this.ownerDocument.createRange();
    r.selectNodeContents(this);
    r.deleteContents();
    var df = r.createContextualFragment(str);
    this.appendChild(df);

    return str;
    }

    HTMLElement.prototype.outerHTML setter = function (str) {
    var r = this.ownerDocument.createRange();
    r.setStartBefore(this);
    var df = r.createContextualFragment(str);
    this.parentNode.replaceChild(df, this);
    return str;
    }
    				
    HTMLElement.prototype.innerHTML getter = function () {
    return getInnerHTML(this);
    }
    function getInnerHTML(node) {
    var str = "";
    for (var i=0; i<node.childNodes.length; i++)
    str += getOuterHTML(node.childNodes.item(i));
    return str;
    }
    HTMLElement.prototype.outerHTML getter = function () {
    return getOuterHTML(this)
    }
    function getOuterHTML(node) {
    var str = "";

    switch (node.nodeType) {
    case 1: // ELEMENT_NODE
    str += "<" + node.nodeName;
    for (var i=0; i<node.attributes.length; i++) {
    if (node.attributes.item(i).nodeValue != null) {
    str += " "
    str += node.attributes.item(i).nodeName;
    str += "=\"";
    str += node.attributes.item(i).nodeValue;
    str += "\"";
    }
    }
       if (node.childNodes.length == 0 && leafElems[node.nodeName])
    str += ">";
    else {
    str += ">";
    str += getInnerHTML(node);
    str += "<" + node.nodeName + ">"
    }
    break;

    case 3: //TEXT_NODE
    str += node.nodeValue;
    break;

    case 4: // CDATA_SECTION_NODE
    str += "<![CDATA[" + node.nodeValue + "]]>";
    break;

    case 5: // ENTITY_REFERENCE_NODE
    str += "&" + node.nodeName + ";"
    break;
      case 8: // COMMENT_NODE
    str += "<!--" + node.nodeValue + "-->"
    break;
    }
     return str;
    }
    				
    var _leafElems = ["IMG", "HR", "BR", "INPUT"];
    var leafElems = {};
    for (var i=0; i<_leafElems.length; i++)
    leafElems[_leafElems[i]] = true;
    然后我們可以封成JS引用
    				
    if (/Mozilla\/5\.0/.test(navigator.userAgent))
    document.write('<script type="text/javascript" src="mozInnerHTML.js"></sc' + 'ript>');





    ====================================================================
    <script language="JavaScript" type="Text/JavaScript">
    <!--
    var emptyElements = { HR: true, BR: true, IMG: true, INPUT: true }; var specialElements = { TEXTAREA: true };
    HTMLElement.prototype.outerHTML getter = function() {
    ????return getOuterHTML(this);
    ????}
    ??function getOuterHTML(node) {
    ????var html = '';
    ????switch (node.nodeType) {
    ??????case Node.ELEMENT_NODE: html += '<'; html += node.nodeName; if (!specialElements[node.nodeName]) {
    ????????for (var a = 0; a < node.attributes.length; a++)
    ??????????html += ' ' + node.attributes[a].nodeName.toUpperCase() + '="' + node.attributes[a].nodeValue + '"';
    ????????html += '>';
    ????????if (!emptyElements[node.nodeName]) {
    ??????????html += node.innerHTML;
    ??????????html += '<\/' + node.nodeName + '>';
    ??????????}
    ????????} else
    ????????switch (node.nodeName) {
    ??????????case 'TEXTAREA': for (var a = 0; a < node.attributes.length; a++)
    ????????????if (node.attributes[a].nodeName.toLowerCase() != 'value')
    ??????????????html
    ????????????????+= ' ' + node.attributes[a].nodeName.toUpperCase() + '="' + node.attributes[a].nodeValue
    ?????????????????? + '"';
    ????????????else
    ??????????????var content = node.attributes[a].nodeValue;
    ????????????html += '>'; html += content; html += '<\/' + node.nodeName + '>'; break;
    ??????????} break;
    ??????case Node.TEXT_NODE: html += node.nodeValue; break;
    ??????case Node.COMMENT_NODE: html += '<!' + '--' + node.nodeValue + '--' + '>'; break;
    ??????}
    ????return html;
    ????}
    //-->
    </script>
    ?

    posted on 2006-08-01 11:05 鄧華的碎碎念 閱讀(4146) 評論(1)  編輯  收藏

    Feedback

    # re: firefox沒有outerHTML用以下方法解決 2012-06-07 10:53 hhhhhhhh
    1989 6月4日   回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 中文字幕一区二区免费| 国产一区二区三区亚洲综合| 两个人看www免费视频| 亚洲日韩中文在线精品第一 | 另类图片亚洲校园小说区| 91在线视频免费播放| 亚洲国产成人a精品不卡在线| 亚洲乱码av中文一区二区| 扒开双腿猛进入爽爽免费视频| 亚洲入口无毒网址你懂的| 免费可以看黄的视频s色| 亚洲日韩精品一区二区三区 | 亚洲第一综合天堂另类专| 无码国产精品一区二区免费vr| 欧美大尺寸SUV免费| 亚洲熟妇自偷自拍另欧美| 美女在线视频观看影院免费天天看 | 无码国产精品一区二区免费式芒果 | 亚洲精品视频在线| 亚洲精品在线免费看| 伊人久久大香线蕉亚洲五月天| 亚洲精品9999久久久久无码| 午夜神器成在线人成在线人免费| 亚洲国产成人久久综合| 亚洲国产一区二区三区| 亚洲а∨精品天堂在线| 亚洲国产精品日韩| 国产午夜免费高清久久影院| 亚洲综合久久成人69| 麻豆国产VA免费精品高清在线| 亚洲日本香蕉视频| 永久免费无码网站在线观看| v片免费在线观看| 热久久精品免费视频| 久久久WWW成人免费精品| 在线观看亚洲一区二区| 精品久久久久久久免费人妻| 久久国产福利免费| 亚洲五月综合缴情婷婷| 久久精品国产精品亚洲| jjizz全部免费看片|