获取ajax响应的根元素的ID

时间:2016-03-15 14:26:41

标签: jquery ajax

我的ajax响应是动态创建的,它可以是:

<div id="one">Test One</div> 

<div id="two">Test Two</div>

我知道如何通过ID从ajax响应中获取元素,但是如果我不知道ID并想要检查它会怎么样?

我试图像下面这样得到它,但是两个console.logs输出&#34; undefined&#34;:

$.ajax({
  type: 'POST',
  url: 'file.php',
  success: function(result)
    {
      console.log ($(result).get(0).id);  // undefined
      console.log ($(result).attr('id')); // undefined
    }
  });

1 个答案:

答案 0 :(得分:1)

您将收到该字符串,因此首先要解析它:

var parsed = $($.parseHTML(result));

...然后从得到的jQuery对象的第一个元素中获取id

var id = parsed.first().attr("id");
// or
var id = parsed[0].id; // If you know for sure there will be at least one element

更新:在评论中,您说它可能会在其前面发表评论,例如

 <!-- comment --> <div id="two">...</div>

而不仅仅是

 <div id="two">...</div>

如果是这样,你需要通过获取第一个元素来略微改变id(跳过注释节点,如果解析的话,你将在jQuery对象中拥有它们)以上):

var id = parsed.filter("*").first().attr("id");

filter仅匹配元素,而不是评论或文本节点。

直播示例

&#13;
&#13;
function success(result) {
  var parsed = $($.parseHTML(result));
  log("ID is " + parsed.filter("*").first().attr("id"));
}

success('<!-- blah blah --><div id="one">Test One</div>');
success('<div id="two">Test Two</div>');

function log(msg) {
  $("<p>").text(msg).appendTo(document.body);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

注意:可以通过将字符串直接传递给$()来解析它,但如果字符串不是&#34;&#34;看起来像&#34; HTML符合jQuery的自动检测,它可能会尝试将字符串解释为CSS选择器。这就是我们$.parseHTML为什么不明确的原因。