jQuery - 我做错了什么。 if - else语句。如果element是parent,则wrap()

时间:2011-05-27 11:51:51

标签: jquery if-statement

我的if else语句的基本思想是:

  • 如果 .wrap是父元素:执行某些操作
  • 其他:做其他事情

这可能没什么意义,但是如果你看一下这里的代码: http://jsfiddle.net/C6NQM/ ..可能

if( $('.wrap:parent'); ) 
    { $('.wrap').children().wrap('<div class="new" />'); }
else { $('.wrap').wrap('<div class="new" />'); }

如果我删除if和else,事情会分开工作,所以我得出的结论是我的if条件有问题。

关于这里有什么问题的任何想法?

2 个答案:

答案 0 :(得分:4)

我想你想要:

$('.wrap').each(function() {
    if($(this).children().length > 0) {
        $(this).children().wrap('<div class="new" />'); 
    }
    else { 
        $(this).wrap('<div class="new" />'); 
    }
});

Updated fiddle.

对您的代码的评论:

if( $('.wrap:parent')) 始终评估为true。对jQuery的调用总是返回一个jQuery对象。您可以执行if( $('.wrap:parent').length > 0),但即使这样,您也会选择示例中的所有元素,因为:parent也会选择将文本节点作为子节点的节点。

但即便如此,整个语句的工作方式如下:如果有任何.wrap元素是父元素,请将子元素包装在新元素中。如果没有,请自行包裹元素 因此,它不会单独处理每个.wrap元素。

更新:要涵盖所有案例(儿童,文字内容,空白),您可能需要这样做:

$('.wrap').each(function() {
    if($(this).children().length > 0) {
        $(this).children().wrap('<div class="new" />'); 
    }
    else if($(this).text().length > 0) { 
        $(this).html('<div class="new">' + $(this).text() + '</div>'); 
    }
    else {
       $(this).wrap('<div class="new" />'); 
    }
});

答案 1 :(得分:0)

我试过,如果你删除';'你的代码就可以了在if条件下。

更新

PS:如果你使用jfiddle.net,javascript中的一般错误也会在FireFox和Safari的错误控制台中打印出来。