0

jsfiddle 调试:http:
//jsfiddle.net/ZpsCX/

较新的更新:
这是 html

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

我试图通过转到父级然后上一个来删除 LI:

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

但如果我用这个

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

它不起作用

4

4 回答 4

0

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

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

于 2012-06-04T01:13:02.387 回答
0

我稍微修改了你的小提琴。您需要确保其中包含 jQuery,然后还将您的代码包装在:

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

​您的原始代码将适用于此。

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

于 2012-06-04T01:26:56.467 回答
0

好的,既然您终于在小提琴中显示了完整的代码,我可以告诉您,问题是您在this尝试执行之前删除了引用的元素,$(this).parent().prev().remove();这不起作用,因为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 的兄弟是无效的(尽管大多数浏览器都对此表示宽容并让您侥幸逃脱)。

于 2012-06-04T01:28:20.340 回答
0

您的代码不起作用的原因是因为 divclass = 'x'没有嵌套在 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>

查询:

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

JSFIDDLE 示例

于 2012-06-04T01:29:09.823 回答