jquery。删除整个li或table元素

时间:2012-08-09 18:00:11

标签: javascript jquery html

我发现使用jquery .after将一个div插入li中会出现问题。基本上,行动是删除整个李...我不知道为什么。我也在不同的表元素上使用.after看到了这种问题,这对我来说更有意义,因为我可以看到它会打破一个表。

看看这个jsfiddle:http://jsfiddle.net/XrUtq/

我必须这样做的原因是因为我必须想出一个通用的方法,以便能够将div中的div作为CLOSE尽可能地放到另一个我无法控制的元素上(可以是任何一种元素)。然后div将相对/绝对地定位在页面上,以超越它所追求的元素。我这样做是因为我们需要一个解决方案,而不是将div附加到正文,因为如果视图被更改,那么附加的元素将保留在页面上,而不是消失它应该的内容。

我希望我已经把问题弄清楚了。我尝试过这样的方法:

if (nodeName === 'td' || nodeName === 'tr' || nodeName === 'th' || nodeName === 'tbody'){           
    popover.appendTo(editable.closest(':visible:not(tr):not(td):not(table):not(tbody)'));
}
else if(editable.is(':visible')){
    popover.after(editable);
}
else{
    $('body').append(popover);
}

但这并不能解决当前li的问题。

感谢您的帮助/建议!

2 个答案:

答案 0 :(得分:3)

您使用稍微不正确的语法(向后排序),请改用:

更改此内容:

$('<div>Blabablabla</div>').after($('.editable'));

对此:

$('.editable').after('<div>Blabablabla</div>');

<强> Working fixed example

jQuery .after(CONTENT)在您选择的元素之后插入提供的内容。 after方法应该附加到您的jQuery选择器。在您的代码中,您将选择器放在after方法中。

我认为您打算使用可能与原始语法一起使用的.insertAfter()

答案 1 :(得分:2)

http://jsfiddle.net/XrUtq/1/

$('li').click(function(){
    $('.editable').after('<div>Blabablabla</div>');
});

jQuery .after()在匹配集中的每个元素(.editable项)之后插入目标元素(div)。您使用的语法是jQuery .insertAfter(),这是执行类似操作的另一种方法。

$('li').click(function(){
    $('<div>Blabablabla</div>').insertAfter('.editable');
});