这两天一直有个问题困扰:
我想把远程访问的一个html页面转化为jquery包装集,从而使用jquery包装集里的选择器进行查找操作,但是似乎不成功,请各位帮忙看看如何可进行此类操作,我的代码是:
<html>
<head>
<script type="text/javascript" charset="gb2312" src='jquery-1.3.2.min.js'></script>
<meta http-equiv="content-type" content="text/html; charset=gb2312"/>
<script type="text/javascript">
$(document).ready(function() 

var s = "<html><body><p>one </p> <div> <p>two </p> <p>three</p></div> <p>three </p></body></html>" ;
var tt=$("p",$(s));
//var tt=$(" <div>"+s+" </div>").find("p"); 
alert(tt.html()); 
}); 
</script> 
<title></title>
</head>
<body>
</body>
</html>
这样的返回结果应该各个<p>标签的内容,结果却是“two”。

解决方案 »

  1.   


    <html>
    <head>
    <script type="text/javascript" src="scripts/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
    var s= $("<div><p>1</p><p>2</p><p>3</p></div>");
    var result = $("p", $(s));
    //(1)
    $("#test").append($(result));
    alert($("#test").html());
    });
    </script>
    </head>
    <body>
    <div id="test"></div>
    </body>
    </html>楼主, 是对的, $(html,[ownerDocument])返回的是一个大的DOM结构, 你把它绑到一个div里, 然后alert一下div的HTML就知道了.直接alert(html)的话, 当然是有问题的, 因为我例中的p1p2p3本身是同级, 根据解析机制, 解析到1就停止了. 如果在(1)位置直接alert($(result).html())会返回1.
      

  2.   

    谢谢,如果我使用的字符串是一个完整的页面源码,是不是这种方式也可以?为什么把它绑定到一个div里面alert时就是完整的,单独打印时就只出现一个呢,麻烦详细解答下吧,谢谢
      

  3.   

    1. 当然是可以的啊, 它相当于在$(s)中筛选<p>标签, 然后将所有符合的标签集合起来形成一个新的DOM结构, 相当于创建了一个新DOM.
    $(expression,[context])实际上就是通过筛选来创建DOM对象2. 要验证你result必须在高一级的层次, 比如例中的<div id="test">中才能完整得到html(), 相当于<div><p></p><p></p><p></p></div>这样以后得到div的innerHTML.
    如果单独$(result).html()相当于<p>1</p><p>2</p><p>3</p>这样的结构, 它的innerHTML访问, 找到了<p>下的1, 然后发现标签结束了</p>就返回了. 
    $().html()与innerHTML是几乎一样的, 找到的是子DOM不知说清楚没有..