jQuery 选择前面的这个



jsfiddle to debug :
http://jsfiddle.net/ZpsCX/

较新的更新:
这是 HTML

<li>Something</li>
<div class='a'>
 <div class='x'>REMOVE</div>
</div>

im试图通过转到父级然后之前删除LI:

 $('.x').click(function(){
    $(this).parent().prev().remove();
 });

但是如果我用这个

 $('.x').click(function(){
   if(bla bla bla){ // and it returns TRUE
     $(this).parent().prev().remove();
   }
 });

它不起作用

好的

,既然您终于在小提琴中展示了完整的代码,我可以告诉您,问题是您在尝试执行$(this).parent().prev().remove();之前删除了this引用的元素,但这不起作用,因为一旦它消失this就没有父级......

您需要以如下方式进行相反的操作:

$(".x").live("click", function(x) {
    // if clicked ".x" has no siblings it must be the last one
    // in the current group
    if ($(this).siblings(".x").length == 0) {
        $(this).parent().prev().remove();
    }
    $(this).remove();
});

http://jsfiddle.net/ZpsCX/12/

请注意,li 元素应该属于 ul 或 ol,并且将div 作为 li 的同级是无效的(即使大多数浏览器对此很宽容并让你侥幸逃脱)。

我稍微修改了你的小提琴。你需要确保jQuery被包含在一个,然后把你的代码包装在:

$(document).ready(function() {
 $('.x').click(function(){
  if(true){ // and it returns TRUE
   $(this).parent().prev().remove();
  }
 });
});

您的原始代码将与此一起使用。

http://jsfiddle.net/ZpsCX/4/

你的代码不起作用的原因是,带有 class = 'x' 的div 没有嵌套在 li 标签内,所以对 .parent 的调用永远不会找到 li。

您可以将div 嵌套在 li 中并使用以下代码:

.HTML:

<ul>
    <li>
        Something
        <div class='a'>
            <div class='x'>REMOVE</div>
        </div>
    </li>
    <li>
        Something Else
        <div class='a'>
            <div class='x'>REMOVE</div>
        </div>
    </li>
</ul>

JQUERY:

$('.x').click(function(){
    $(this).parents('li').remove();
 });​

JSFIDDLE 示例

固定:http://jsfiddle.net/ZpsCX/11/

我删除了 if 语句,因为它总是返回 true。您还需要包含 jQuery 并添加一个包装器:)

最新更新