我正在向我网站上的页面发出 ajax 请求,并将此元素作为 body 标记的直接子元素:
<div class="container" id="wantme"><div class="content"></div></div>
只有一个.container
,我想获取我不知道的ID。
据我所知,这段代码应该可以满足我的要求:
$.get('/page', function(data) {
id = $('.container', data).attr('id');
});
但是 .container
选择器找不到任何东西。
我确实找到了这两个解决方法。我可以找到.content
,我可以像这样爬上树:
id = $('.content', data).parent().attr('id');
但我不能直接跳到那里。
我在 StackOverflow 的其他地方找到了这个可行的解决方法:
html = $('<div></div>').html(data);
id = html.find('.container').attr('id');
但为什么看似显而易见的答案却行不通呢?
最佳答案
更新的答案:我会在底部留下我原来的答案,但我担心它可能会因浏览器而异。 jQuery 的 .html()
使用 Javascript 的 innerHTML
- 一些浏览器选择剥离 <head>
和 <body>
使用 innerHTML
时的标签,而其他人则没有。
实现您所追求的目标的最安全方法可能仍然是您提到的解决方法,如下所示:
var data = '<!doctype html><html><body><div class="container" id="findme"><div class="content"></div></div></body></html>';
var $container = $("<div />").html(data).find(".container");
var id = $container.attr("id");
console.log(id);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
有关浏览器相关问题的更多信息 can be found here .
上一个答案:
当您将 HTML 传递给 jQuery 元素时,它会忽略 <body>
标签,以及它们之外的任何东西。给定 JSFiddle 中的数据字符串,$(data)
将创建如下所示的内容:
<div class="container" id="findme">
<div class="content"></div>
</div>
如您在上面的 HTML 中所见,您的 .container
不在 $(data)
的里面 - 它是 $(data)
.
因为 $(data)
代表你的.container
元素,你应该能够做到 $(data).attr("id")
检索您想要的内容。
var data = '<!doctype html><html><body><div class="container" id="findme"><div class="content"></div></div></body></html>';
var id = $(data).attr('id');
console.log(id);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
关于javascript - jQuery 选择器忽略了来自单独上下文的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264072/