Jquery.find返回的对象与.data()意外地表现出来

时间:2018-04-02 18:27:56

标签: javascript jquery

看一下这个例子:

let ele = $(`
    <div></div>
  <div class="test" id="test" data-test="test"></div>`
);

const ele1 = ele.find('.test'); //undefined
const ele2 = ele.find('#test'); //undefined

console.log(ele1.data());
console.log(ele2.data());

ele = $('<div class="test" id="test" data-test="test"></div>');
console.log(ele.data()); //works
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

.find()返回的对象与$()返回的对象之间似乎存在差异

我认为它与第一个ele有两个没有父母的兄弟姐妹有关,但考虑到无法改变,我怎么能得到{{1数据?

当你创建一个像我一样没有父元素的元素时,我无法找到任何预期的行为,为什么会发生这种情况。

小提琴:https://jsfiddle.net/xpvt214o/26285/

1 个答案:

答案 0 :(得分:1)

您可以将HTML包装在单个div中,以便能够在其上使用find()。但是,如果您无法更改HTML,则可以使用filter()来完成,因为它是jQuery元素的集合:

&#13;
&#13;
// Your element, as you defined it in your question
let ele = $(`
    <div></div>
  <div class="test" id="test" data-test="test"></div>`
);

console.log(ele.filter('.test').data());
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;