2013-11-26 214 views
0

我嘗試設置顯示:當選擇正在改變時,在父母的所有跨度上都沒有顯示。獲取父母的所有兒童的父母

我的HTML代碼

<div id="product1"> 
<div class="block"> 
    <span>qwerty</span> 
    <span>qwerty</span> 
    <span>qwerty</span> 
    <span>qwerty</span> 
    .... 
    <span>qwerty</span> 
</div> 
<div class="input"> 
    <select class="sel"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
    </select> 
</div> 
</div> 
several times the same 

我當然希望設置顯示:沒有在我選擇在同一個DIV ID = 「了ProductX」 的所有span元素。

我不工作的jQuery代碼。

$(document).ready(function(){ 
     $(document).on('change', '.sel', function() { 
      $(this).parent('div').children('span').css('display' , 'none'); 
     }); 
    }); 

回答

2

一個簡單的測試顯示您的問題

console.log($(this).parent('div')) 

它返回<div class="input">它沒有跨爲兒童。

這將是

$(this).parent('div').parent('div').find("span").hide(); 

你可以使用一個選擇和最親密的

$(this).closest('div[id]').find("span").hide(); 

更好地將添加一個類

+0

謝謝你的工作。我無法接受你的答案,因爲我的代表低。 – Piotr

0

嘗試:

$(document).ready(function(){ 
    $(document).on('change', '.sel', function() { 
     $(this).parent('div').parent('div').find('span').css('display' , 'none'); 
    }); 
}); 
+0

而不是'$(本).closest( '#產品1')'你可以只'$( '#產品1')'。 –

+0

Ty但我有很多塊,並且都有id product1,product2等。我必須有結構的通用代碼。 – Piotr

+0

@Piotr編輯答案。 – Hiral

0

所以,當你要設定顯示沒有一個選擇的變化在product1 div下面的所有span標籤上? 從你在那裏得到的代碼看起來你會得到父節點的選擇,這將是類輸入的div。所以我想你將不得不再次獲得該div的父母,並選擇所有孩子跨越。

0

嘗試使用.parents()

$(document).ready(function(){ 
     $(document).on('change', '.sel', function() { 
      $(this).parents('div[id^="product"]').children('span').css('display' , 'none'); 
     }); 
    });