javascript - jQuery 选择器忽略了来自单独上下文的元素

标签 javascript jquery html dom

我正在向我网站上的页面发出 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/

相关文章:

javascript - 无法使用 Prototype.js 登录 Tiny Tiny RSS API

javascript - self.focus() 和 window.focus() 适用于 Safari,但不适用于 IE

javascript - 虚拟渲染

javascript - 如何在不激活其余部分的情况下使下拉部分上的指示器切换?

jquery-ui 选项卡带有淡入?

jquery - Rails 使用 jquery 和 ajax 通过 js.erb 传递 param 变量

html - 伪类不会改变

javascript - HTML动态弹出框

jquery - 在鼠标悬停时在 div 上创建移动文本

javascript - async await Promise 用法永远阻塞等待