首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery:如果dom元素不存在,则添加它

jQuery:如果dom元素不存在,则添加它
EN

Stack Overflow用户
提问于 2009-10-30 18:29:56
回答 2查看 52.6K关注 0票数 24

长问题

是否可以仅在DOM元素不存在的情况下添加该元素?

示例

我已经像这样实现了需求:

代码语言:javascript
复制
var ins = $("a[@id='iframeUrl']");
ins.siblings('#myIframe:first').remove().end().parent().prepend('<iframe id="myIframe"  src="'+ins.attr("href")+'"></iframe>');

有没有可能用更优雅的东西代替第二行?比如ins.siblings('#myIframe:first').is().not().parent().prepend ..。

我可以检查ins.siblings('#myIframe:first').length,然后添加IFrame,但是好奇心占据了上风,我试图用尽可能少的语句来做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-30 18:39:42

我认为你建议的方式(计算长度)是最有效的方式,即使它确实涉及更多的代码:

代码语言:javascript
复制
var ins = $("a[@id='iframeUrl']");

if(ins.siblings('#myIframe:first').length == 0)
    ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');

此外,:first选择器在这里也是多余的,因为应该只有一个元素具有该ID,所以:

代码语言:javascript
复制
var ins = $("a[@id='iframeUrl']");

if($('#myIframe').length == 0)
    ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');

也行得通。

编辑:正如Fydo在评论中提到的,长度检查也可以缩短,所以最简洁的形式是:

代码语言:javascript
复制
var ins = $("a[@id='iframeUrl']");

if(!$('#myIframe').length)
    ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');

注意if条件中选择符前面的感叹号!

票数 36
EN

Stack Overflow用户

发布于 2015-03-19 14:40:45

我需要一些类似的东西,并且我总是试图减少代码量,所以我编写了这个小辅助函数(TypeScript)。

代码语言:javascript
复制
$.fn.getOrAddChild = function(selector: string, html: string): JQuery {
  var $parent = <JQuery>this;
  if (!$parent.length)
    throw new Error("Parent is empty");
  var $child = $parent.children(selector);
  if (!$child.length)
    $child = $(html).appendTo($parent);
  return $child;
}

// Usage
$("div.myDiv").getOrAddChild("div.myChildDiv", "<div class='myChildDiv'/>");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1649029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档