2017-09-14 102 views
0

經過對谷歌和各種論壇的大量研究後,我在這裏發佈這個問題。。不在jquery不能正常工作

我有5個div元素像下面 -

<div id="domain1"></div> 
<div id="domain2"></div> 
<div id="domain3"></div> 
<div id="domain4"></div> 
<div id="domain5"></div> 

當我點擊一個DIV,我想隱藏的div的其餘部分。

對於這一點,我寫的代碼作爲 -

$("#^='domain'").not(id).hide(); 

其中id是一個變量(VAR ID),其動態地保持所點擊div元素的id。

這隱藏了所有五個div元素。這不包括點擊的div元素。

請幫助,我哪裏去錯了。

+0

你可以做的console.log(ID)之前,代碼執行看到字符串的樣子,以驗證它拼寫正確,並且不空值? – Andrei

+0

你把'#'放在id變量中嗎?如果沒有,你需要'不'('#'+ id)' –

+0

是的#會去id變量。 – user2063635

回答

0

這裏是.not()正在做它應該做的。當然,我傳遞了clicked元素本身,而不是試圖構建一個ID選擇器來匹配。

$(document).ready(function(){ 
 
    $("div").on("click", function(){ 
 
    var clickedEl = $(this); 
 
    $("div").not(clickedEl).toggle(); 
 
    
 
    // OR ANOTHER WAY, if they're at the 
 
    // same level in the DOM. Simply comment 
 
    // out the above, and uncomment the below 
 
    // to see the same result. 
 
    // 
 
    //clickedEl.siblings("div").toggle(); 
 
    }) 
 
})
div { 
 
    height: 25px; 
 
    width: 200px; 
 
    border: 1px dotted blue; 
 
    background-color: #FFA; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="domain1">a</div> 
 
<div id="domain2">b</div> 
 
<div id="domain3">c</div> 
 
<div id="domain4">d</div> 
 
<div id="domain5">e</div>

2

您的初相匹配的ID #^='domain'的語法是不正確的 - 它缺少[]支架和使用#,而不是id

這是你想要什麼:

$('div').click(function() { 
 
    var id = $(this).attr("id"); 
 
    console.log(id); // note it does not include the # 
 
    $("[id^='domain']").not('#'+id).hide(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="domain1">1</div> 
 
<div id="domain2">2</div> 
 
<div id="domain3">3</div> 
 
<div id="domain4">4</div> 
 
<div id="domain5">5</div>

+0

使用toggle()而不是hide() - 否則,您不能將其他div帶回。 ;) – Snowmonkey

+0

嗯,當然。但這不是他們所問的。 –

+0

我在這裏匆忙地輸入了一個錯誤的值。編輯該問題的正確價值。 #在我的情況下帶有id變量。我用$(「[id^='domain']」)。not(id).hide();這也隱藏了所有div – user2063635