长问题
是否可以仅在DOM元素不存在的情况下添加该元素?
示例
我已经像这样实现了需求:
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,但是好奇心占据了上风,我试图用尽可能少的语句来做到这一点。
发布于 2009-10-30 18:39:42
我认为你建议的方式(计算长度)是最有效的方式,即使它确实涉及更多的代码:
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,所以:
var ins = $("a[@id='iframeUrl']");
if($('#myIframe').length == 0)
ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');
也行得通。
编辑:正如Fydo在评论中提到的,长度检查也可以缩短,所以最简洁的形式是:
var ins = $("a[@id='iframeUrl']");
if(!$('#myIframe').length)
ins.parent().prepend('<iframe id="myIframe" src="'+ins.attr("href")+'"></iframe>');
注意if条件中选择符前面的感叹号!
发布于 2015-03-19 14:40:45
我需要一些类似的东西,并且我总是试图减少代码量,所以我编写了这个小辅助函数(TypeScript)。
$.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'/>");
https://stackoverflow.com/questions/1649029
复制相似问题