2015-08-27 67 views
1

我想在類012xx類的父項具有子項.delete時單擊.input類時,將類.hidden添加到父項。否則,請刪除父項而不是隱藏它。問題是它總是將.hidden類添加到父級,無論如何。將類添加到具有特定子項的父項

HTML:

<div class='container'> 
    <input class='input' type='text'> 
    <input class='input delete' type='text'> 
</div> 
<div class='container'> 
    <input class='input' type='text'> 
</div> 

JS:

$('.input').on('click', function() { 

    var element = $(this); 

    if (element.parent().has('.delete')) { 
      element.parent().addClass('hidden'); 
     } else { 
      element.parent().remove(); 
    } 
}); 
+0

我不太清楚你在問什麼。但是也許你想用'hasClass()'來代替? – sburke0708

+0

http://jsfiddle.net/Ls88xxds/ – adeneo

+0

使用'hasClass()'或'is()'返回布爾值。 '.has()'過濾結果。 – Popnoodles

回答

1

.has()不返回真/假,它選擇。更改,如果到:

if (element.parent().has('.delete').length) { 

jsFiddle example

+0

或者使用'.is()'來完成OP期望的'.has()' – Popnoodles

0

如果需要檢查,如果父母一方與.delete類的子元素,那麼你就可以在你的代碼改成這樣:

$('.input').on('click', function() { 

    var element = $(this); 

    if (element.parent().children('.delete').length > 0) { 
      element.parent().addClass('hidden'); 
     } else { 
      element.parent().remove(); 
    } 
}); 
2

在您的具體情況

element.parent().has('.delete') 

返回一個jQuery對象,這將有有它的1個或0的DOM元素。在'if'語句中使用,它將評估爲true,因此您將永遠不會得到else情況。

而是使用

element.parent().has('.delete').length 

將if語句返回0或1。零將評估爲false的。

相關問題