jQuery - 如果不存在则创建元素 - 更短的方式

时间:2011-06-21 02:11:13

标签: javascript jquery jquery-selectors

如何判断某个元素是否还有另一个元素? 如果没有,请添加一个新的然后返回。

我尝试过:

var myel = ($('> div.my', this).length > 0)
    ? $('> div.my', this)
    : $(this).append('<div class="my"></div>').css('opacity', 0);

但即使它创建了我的元素,如果它不存在,它也不会返回它......

4 个答案:

答案 0 :(得分:17)

这个怎么样?

var myel = $('> div.my', this).length ? $('> div.my', this) : $('<div class="my"></div>').css('opacity', 0).appendTo(this);

答案 1 :(得分:4)

我就是这样做的:

var myDivs = $('div.container').children('div.my');
if(myDivs.length === 0){
    myDivs = $('<div class="my"></div>   ')
        .appendTo('div.container')
        .css('opacity', 0);     
}

我的理由是你只需要查询一次孩子,所以如果有很多孩子,这将节省一些时间。

此外,如果没有孩子,那么你创建一个,appendTo容器,执行css然后返回它。

答案 2 :(得分:3)

与Alastair的方法类似,但使用过滤器:

$('div.outerDiv:not(:has(div.my))').each(function(){
  $('<div class="my"></div>')
    .appendTo(this)
    .css('opacity', 0);
});

答案 3 :(得分:0)

后来我知道,但是采用了另一种方法,添加语法糖并使事情清晰易懂IMO:

function ifNotExists($x){
    if(!$x || $x.length === 0) return { create : function(newX){ return newX; }}
    else return { create : function(){ return $x } };
}

//usage:
$someDiv.append(ifNotExists("div.child").create("<div class='child'>"));