如何使用jQuery检查动态创建的元素是否已存在?

时间:2012-01-08 12:46:13

标签: javascript jquery dom

我动态创建一个元素:

var $el = $('<div class="someclass"></div>');

我想在某处附加元素($el),但它不应该有id

我如何知道它之前是否已被追加?

修改
我认为这应该有用

if($($el, "#target").length == 0)
    $("#target").append($el);

但这是错误的

4 个答案:

答案 0 :(得分:5)

您只需检查是否有父母:

var $el = $('<div class="someclass"></div>');
//Code you wrote that may or may not attach it to the DOM

if($el.parent().length === 0) {
    //The element has not been added to the DOM because it doesn't not have a parentNode
}

但是,如果你不知道该元素实际上做了什么,你的代码可能还有其他问题。

答案 1 :(得分:4)

如果我理解,您需要在添加<div class='someclass'>之前检查是否已存在其他$el,您可以执行以下操作:

if ($("div.someclass").length === 0) {
  // it has not been created yet, create a new one
  var $el = $('<div class="someclass"></div>');
}

要检查它是否已经是某个其他元素的子节点,请使用.find()

if ($("#parentNode").find("div.someclass").length === 0 {
  // it has not been created yet, create a new one
  var $el = $('<div class="someclass"></div>');
}

答案 2 :(得分:1)

如果我理解正确,你希望找到这个 exact 元素是否已经存在于DOM中,而不是碰巧具有相同类的其他任意元素。

如果是这样,我相信这会奏效。

首先,将最初创建的元素作为HTMLElement对象而不是jQuery对象:

var el = $el.get(0);

然后在doc:

中尝试.find()
var $match = $(document).find(el);
var found = ($match.length > 0);

这样效率不高 - 如果可以的话,将选择器document限制在DOM的较窄部分!

您的修改建议您可以使用#target作为该选择器。

答案 3 :(得分:-1)

如果您只想要一个元素,那么您应该使用带有该元素的ID,然后以类似于Michael的方式检查它。使用

var el = $('<div id="someID" class="someClass" />');

我也不确定您使用$el而不仅仅是el的原因