在jQuery .get()的Data对象中查找元素

时间:2013-04-06 03:56:09

标签: javascript jquery xmlhttprequest

我认为这会更容易找到:)

$.get('/page.html', function(data) {
    //get only contents of class="contents"
});

我似乎无法找到如何做到这一点。

3 个答案:

答案 0 :(得分:2)

只需使用.find()

$(data).find(".contents")

以下是您可以使用的最终代码:

$.get('/page.html', function(data) {
    var contents = $(data).find(".contents");
});

然后,根据.contents的元素类型,您可以使用contents.html()contents.text()(大多数元素)或contents.val()(输入元素)。

从技术上讲,另一个想法是使用.filter()

这完全取决于data中HTML的结构。如果您的结构是这样的:

<div id="main">
    blah blah
    <div class="contents"></div>
</div>

然后$(data)的结果为[#main],您需要使用find。如果您的结构如下:

<div id="main"><div>
<div class="contents"></div>
<div class="another"></div>

然后$(data)的结果为[#main, .contents, .another],您需要使用filter

当然,结合它们,可能是:

$.get('/page.html', function(data) {
    var all = $(data), contents;
    contents = all.filter(".contents");
    if (!contents.length) {
        contents = all.find(".contents");
    }
    if (contents.length) {
        // It/they was/were found at some point
    }
});

答案 1 :(得分:2)

我会做这样的事......

$.get('/page.html', function(data){
   var $page = $(data)
   var $contents = $page.filter('.contents'); /* this will get a reference to the .contents */
   /* do more stuff here 
      ....  
   */
});

查看此SO的接受答案:Get HTML of div element returned by .get with jQuery

如果返回内容的结构不确定(由于.find()是后代,有时您需要使用.contents,您可以随时执行检查并运行.filter()反之亦然。

示例:

$contents = $page.filter('.contents');
if($contents.length == 0) {
   $contents = $page.find('.contents');
}

只是基于其他答案中发表的评论的想法。

答案 2 :(得分:2)

如果从返回的data创建jQuery对象,并且jQuery集中的包装元素是.contents元素,则find无法找到目标元素,如果{{1}元素是一个后代元素,然后contents方法无法选择该元素。您可以创建一个虚拟元素,使用返回的数据填充它并使用filter方法。

find