欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

JQuery中扩展outerHtml方法

shiping1 的头像

Query中扩展outerHtml方法

      (济南的天气真奇怪,忽冷忽暖的,被冻到好几次了 .. ...)

      现在终于要用到JQuery了,所以抽个时间来学习下 ... .. 

      JQuery里并没有专门的取得outerHtml的方法,只有一个html()方法,用以取得当前Dom对象innerHTML,如:

               $("$txtUserName").html();   

这样取得的将是ID=“txtUserName"的Dom对象的innerHTML,如何获得它的outerHTML呢?在网上看到的,有一种方法,将当前的JQuery对象转成Dom对象,然后直接用DOM对象的outerHTML方法来获取:

               $("#txtUserName")[0].outerHTML;

这样的话倒是可以取到,不过也只有在IE下才可行,其他浏览器(比如FireFox , GoogleChome,Opera等等)下未必行得通。还有另一种方法,先获取当前JQuery对象的父级对象,然后取父级JQuery对象的html()。这样思路肯定是没问题的,不过他给的例子却是错的:

               $("#txtUserName").parent().html();

通过当前的JQuery对象,确实可以找到它唯一的父级对象,但是却不能保证该父级对象下就只有当前的这一个子级对象,所以方法要修改一下,先创建一个可以添加子级的JQuery(DOM)对象,然后将需要取得outerHTML的对象添加到这个新创建的对象的子级下,然后取新创建的这个对象的html():

               $("<p></p>").append($("#txtUserName")).html();

上面这行代码如果执行的话,还是会有问题的,调用append的时候,如果所添加的对象是画面上已经存在的对象,那么就相当于将对象移动到新的标签下。所以上面代码一执行,就会发现我画面上原有的ID="txtUserName"的文本框刷的一下就没有了,因为它被移动到了新创建的<p></p>标签下,而,这个<p></p>标签并没有往画面上添加过,所以结果就悲剧了... 解决这个问题的话,也很简单,我们先创建文本框的一个副本,把这个副本对象添加到<p></p>下,然后再取html():

               $("<p></p>").append($("#txtUserName").clone()).html();

这样应该就可以了,而且其浏览器的兼容性完全取决于JQuery。

最后把上面的取值方式扩展为JQuery对象的方法:

               $.fn.outerHtml = function(){  return $("<p></p>").append(this.clone()).html(); }

这样就大功告成了..        扩展之后,我们再取某个对象的outerHTML,就直接用下面的方式就好了:

              $("#txtUserName").outerHtml();

     下面贴上测试用的HTML代码:

  <html>

  <head>

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>

  <script language="javascript" type="text/javascript">

  /*

   给JQuery对象扩展一个outerHtml方法,应该可以支持多浏览器吧..

  */

  $.fn.outerHtml = function(){

  return $("<p></p>").append(this.clone()).html(); 

  };

    $(document).ready(function(){ 

    //得到文本框(id="txt")的html语法

    $("<h4>1.测试文本框的outerHtml方法</h4>").insertBefore($("#txt"));

      alert($("#txt").outerHtml());

      //得到table中第二个tr的html语法

      $("table").before($("<h4>2.测试Table的outerHtml</h4>"));

      alert($("table tr:eq(1)").outerHtml());

    }); 

  </script>

  </head>

  <body >

     <input id="txt" type="text" value="1"/>

    <table border="1">

    <tr>

    <td> N1</td>

    <td> N1</td>

    <td> N1</td>

    <td> N1</td>

    </tr>

    <tr>

    <td> N2</td>

    <td> N2</td>

    <td> N2</td>

    <td> N2</td>

    </tr>

    <tr>

    <td> N3</td>

    <td> N3</td>

    <td> N3</td>

    <td> N3</td>

    </tr>

    </table>

  </body>

</html>

来自 http://hi.baidu.com/wwqsshl/item/c80a3b0c6c8d3190a2df43e1

普通分类: