问题1:想通过JS获得自定义标签,中间碰到2个问题。以下<Control>为自定义标签,下面代码已经能获得自定义标签,并且在标签后方插入HTML代码。但是把下面代码中<Table>标签删除后插入功能就失效了。比较奇怪的问题。问题2:当通过Ajax把自定义标签加页面某一容器时候。自定义标签就不作为HTML显示了,无法通过下面的function获得。请问怎么解决??
<script type="text/javascript">
function s()
{
document.getElementById("ds");
var di = document.getElementsByTagName("Control");
alert(di.length);
for(var i =0; i < di.length;i++)
{
di[i].insertAdjacentHTML("afterEnd","<br><input name='txt1'>");

}
}
</script>  <table id="t">
  </table><div id="ds">
<Control   Title="标题啊啊啊啊啊"/><Control  />
</div>
<br/>
<input type="button" value ="clikck em" onclick="s()"/>

解决方案 »

  1.   

    声明为xhtml
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">兼容firefox要自己定义insertAdjacentHTML 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <script type="text/javascript">
    if ('undefined' != typeof HTMLElement && HTMLElement.prototype && !HTMLElement.prototype.insertAdjacentHTML)
    HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
    var df; var r = this.ownerDocument.createRange();
    switch (String(sWhere).toLowerCase()) {
    case 'afterbegin':
    r.selectNodeContents(this);
    r.collapse(true);
    df = r.createContextualFragment(sHTML);
    this.insertBefore(df, this.firstChild);
    break;
    case 'afterend':
    r.selectNodeContents(this);
    r.collapse(true);
    df = r.createContextualFragment(sHTML);
    this.appendChild(df);
    break;
    case 'beforebegin':
    r.setStartBefore(this);
    df = r.createContextualFragment(sHTML);
    this.parentNode.insertBefore(df, this);
    break;
    case 'beforeend':
    r.setStartBefore(this);
    df = r.createContextualFragment(sHTML);
    this.parentNode.appendChild(df);
    break;
    }
    };
    function s() {
    document.getElementById("ds");
    var di = document.getElementsByTagName("Control");
    for(var i = 0; i < di.length; i++) {
    di[i].insertAdjacentHTML("afterEnd","<br><input name='txt1'>");
    }
    }
    </script>
    <body>
    <div id="ds">
    <Control Title="标题啊啊啊啊啊"/>
    <Control Title="测试"/>
    </div>
    <br/>
    <input type="button" value ="clikck em" onclick="s()"/>
    </body>
    </html>