2015-10-16 71 views
1

我有一堆匹配ID爲(#idA_1 and #idB_1, #idA_2 and #idB_2, etc)的div。在jQuery中我想分配點擊功能,所以當我點擊一個#idA它會顯示和隱藏#idB。 基本上我想使這個:將Id名稱的一部分變爲變量

$(".idA_x").click(function(){ 
    $("idB_x").toggleClass("hide") 
}); 

X是一個變量,使#idA#idB匹配。我可以單獨編寫每一個,但是這會花費太多代碼,是否有辦法將id中的數字變成變量?

+1

$( 「#IDA _」 + X)。點擊.....其中x是數 –

回答

0

當然,你可以這樣做:

var num = 13; 
addButtonListener(num); 

function addButtonListener(num){ 
    $("#idA_"+num).click(function(){ 
     $("#idB_"+num).toggleClass("hide") 
    }); 
} 
+0

$( 「#IDA _」 + X)。點擊... –

+0

@SandeepNayak他提到他有幾個如此包裝它在一個函數中是有用的 – juvian

0

嘗試JQuery的解決方案:

var x = 1; 
$(".idA_" + x).click(function(){ 
    $(".idB_" + x).toggleClass("hide") 
}); 

希望這有助於。

+1

所以,如果OPs有一堆div(可以說從1到20的範圍),這個解決方案將工作通過複製該代碼20次,對吧? – taxicala

0

有很多方法可以實現這一點,但您可能需要的是創建一個共享CSS類,例如, .ids,以及事件監聽器綁定到一個:

$('.ids').click(function() { 
    //... 
}); 

然後你就可以處理函數體內更清潔的方式你的邏輯。

0

爲了使其動態,而不必重複你的號碼中的每一個代碼,我建議做如下:

首先,添加一個類的所有div的你想成爲點擊.clickable ,然後用點擊事件的ID,爲B替換,以選擇元素,你怎麼切換類:

$(".clickable").click(function(){ 
    var id = $(this).attr('id'); 
    $("#" + id.replace('A', 'B')).toggleClass("hide"); 
}); 

或者,您也可以選擇所有div並使用包含通配符:

$("div[id*='idA_']").click(function(){ 
    var id = $(this).attr('id'); 
    $("#" + id.replace('A', 'B')).toggleClass("hide"); 
}); 

此解決方案不需要向所有可點擊的div添加類。

0

您可以使用屬性選擇器開始以目標您想要具有相應元素的id。

https://api.jquery.com/attribute-starts-with-selector/

然後,使用該ID分裂和施加Array.pop()以除去所述陣列的所述第一部分中的understore後得到的值。

http://jsfiddle.net/up9h0903/

$("[id^='idA_']").click(function() { 
    var num = this.id.split("_").pop(); 
    $("#idB_" + num).toggleClass("hide") 
}); 

使用正則表達式將是你的其他選擇從ID剝離的數量。

http://jsfiddle.net/up9h0903/1/

$("[id^='idA_']").click(function() { 
    var num = this.id.match(/\d+/g); 
    $("#idB_" + num).toggleClass("hide") 
}); 
相關問題