2

我正在开发一个 jQuery 小部件,它将事件附加到小部件的父级,但我无法判断它是否有父级。

例如;

var x = $('<div>');
x.mywidget();

........... in mywidget
_create : function () {
    var y = this.element.parent() === undefined ? this.element : this.element.parent();
    y.bind(....);
}

在执行绑定语句之前,我需要检查小部件是否已添加到 DOM。如果它还没有被添加到 DOM 中,那么我将this.element.bind(....)改为绑定。

问题是$('<div>').parent()返回一个 jQuery 对象!我期待它会回来undefined

所以我想知道当它不应该有父母时它会返回哪个父母?

4

6 回答 6

3

您可以使用myDiv.parent().length来知道 jQuery 集是否为空。

但是,如果对象没有直接从 DOM 中删除,但它的父对象是,这将产生误报。

如果你想要一个可靠的检测,那么,你应该使用jQuery.contains(document.documentElement, myDiv).

于 2013-03-27T16:45:07.547 回答
3

总是会返回一个对象。如果您想查看对象中是否有任何内容,您可以检查 ,您的检查也是.length == 0如此$("<div>").parent().length == 0

于 2013-03-27T16:45:23.110 回答
2

检查返回的 jQuery 对象的长度。如果您的 div 没有父级,则返回的 jQuery 对象.parent将包装零个元素。

于 2013-03-27T16:45:03.187 回答
2

所有 jQuery DOM 搜索和操作方法都返回一个包含 0 个或更多元素的 jQuery 集合。 $("<div>").parent()返回一个没有元素的集合(一个空集合)。您仍然可以在其上调用任何 jQuery 方法,但不受 DOM 元素的束缚,您可以做的事情非常有限。它将.length为零,并且在使用 迭代时不会到达回调.each

于 2013-03-27T16:47:20.360 回答
2

我会检查 jQuery 对象的长度,因为 jQuery 总是会返回一个对象。

于 2013-03-27T16:48:20.330 回答
0

它将永远是父母,例如可以是身体

例如使用 jquery 数据来设置你的初始化标记

var wasInit = ( $(this).data("mypluginwasinit") !== undefined );
if(wasInit) return;
$(this).data("mypluginwasinit","yes");
于 2013-03-27T16:49:07.663 回答