2013-07-26 97 views
1

這可能會讓其他人感到困惑,因爲它對我來說是這樣,但我想知道是否可以使用jquery根據唯一屬性值查找元素,然後設置不同屬性的值。基本上我想通過自定義屬性使靜態頁面看起來動態。按屬性查找元素,設置發現元素的不同屬性

有些html是;

<div class="Sell" style="width: 47px;"><input type="checkbox" fund-id="1" id="chkSell"  class="_1"/></div> 
<div class="Buy" style="width: 47px;"><input type="checkbox" fund-id="1" id="chkBuy"  class="_1"/></div> 
<div class="BuySelllbl" style="width: 10px;"><label id="lblBuySell_1" fund-id="1">&nbsp;</label></div> 

我已經設置了「基金-id」屬性爲「1」,顯示所有這些連接爲1分的記錄,隨後的記錄將是2,3,4等。

我有一個功能,取決於選中的複選框,我將在上面的標籤中顯示出售S或出售B。我的功能看起來像這樣;

$("#chkSell").live('change',function(){ 
    var y = $(this).attr("class"); 
    var x = "lblBuySell" + y; 
    var fundID = $(this).attr("fund-id"); 
    //alert(fundID); 
    if(this.checked){ 
     var lbl = $("label").find("[fund-id='" + fundID + "']"); 
     alert(lbl); 
     $(lbl).html("S"); 
     //$("#" + x).html("S"); 
     $("#" + x).attr("style","color: red;"); 
    }else{ 
     $("#" + x).html("&nbsp;"); 
    } 
}); 

我希望能夠做的就是把資金從ID的複選框,查找具有相同相關基金-ID標籤,只是設置標籤的.html屬性是一個「S」和如下圖所示,爲紅色。這是可能的還是我只是在我的思維過程中發生衝突? 任何幫助,非常感謝。 謝謝 NickG

+0

你使用的是什麼版本的jquery? – cfs

+0

你應該使用數據屬性,然後你可以利用jquery的.data設置它們和$(「label [data-fundid ='3']」)來找到它們 – Pete

+0

vers:1.8.3和@Pete can I通過我的自定義屬性成功找到元素後,使用.data設置它們? –

回答

1

您將要使用自定義data-樣式屬性來查找複選框的相應標籤。在這個例子中,每個複選框都有data-fund-id和data-label屬性。當複選框被改變時,corect標籤元素的文本被data-fund-id查找,並且(如果複選框被選中),它的文本被設置爲數據標籤值。

Working demo

HTML

<div class="Sell" style="width: 47px;"> 
    <input type="checkbox" data-fund-id="1" id="chkSell" data-label="S" /> 
</div> 
<div class="Buy" style="width: 47px;"> 
    <input type="checkbox" data-fund-id="1" id="chkBuy" data-label="B" /> 
</div> 

<div id="BuySelllbl" style="width: 10px;"> 
    <label id="chkSell_lbl" data-fund-id="1">&nbsp;</label> 
</div> 

jQuery的

$(":checkbox").on('change', function() { 
    var that = $(this), 
     label = $("label[data-fund-id=" + that.data("fund-id") + "]"); 

    if (this.checked) { 
     label.css("color", "red").html(that.data('label')); //the font color should probably just be set in a .css file 
    } else { 
     label.empty(); 
    } 
}); 
+0

感謝您的建議我打算做一些搞砸它,看到另一個原因,我不設置標籤顏色通過CSS是因爲根據它作爲一個買或賣我想改變顏色,我正在使用類屬性的一個不同的功能,否則我只是設置類屬性來反映它 –

+0

此外,閱讀你的代碼,我不想設置複選框標籤任何東西,我想設置具有相同的基金id作爲複選框,被點擊的值「S」或「B」的標籤取決於複選框。我試圖通過使用與該標籤匹配的基金標識和選中的複選框來找到相關標籤,然後在找到具有相關基金標識的標籤後分別將標籤HTML屬性設置爲「S」或「B」 –

+1

@NickG此代碼應該使用與複選框相同的基金標識更新標籤。嘗試運行我鏈接到的jsFiddle,我認爲這就是你要找的。 – cfs

0

我想我想通了使用下面的代碼;

$("#chkSell").live('change',function(){ 
    var y = $(this).attr("class"); 
    var x = "lblBuySell" + y; 
    var fundID = $(this).attr("fund-id"); 
    //alert(fundID); 
    if(this.checked){ 
     $('label[fund-id="' + fundID + '"]').html("S"); 
     $('label[fund-id="' + fundID + '"]').attr("style","color: red;"); 
    }else{ 
     $("#" + x).html("&nbsp;"); 
    } 
}); 
+1

這與我發佈的答案非常相似,除了這個解決方案,您將不得不爲每個複選框編寫處理程序,而不是針對所有複選框的一個處理程序 – cfs

+0

您是對的,我將其建模爲代碼,我認爲你的代碼的方式我必須有基金ID屬性正確?這就是我爲我的代碼所做的一切,我認爲他們最終會尋找並做同樣的事情,雖然你的代碼更清潔 –

+0

我在我的答案中也添加了一個基金id屬性,我只是用'data- '。這是在HTML5中添加自定義屬性的首選方式。儘管我們的答案完成了類似的事情,但這個答案只針對一個「出售」複選框,而我的地址則會處理所有複選框。無論哪種方式,我希望你找到了一個爲你服務的解決方案。如果您確實請接受它,以便具有相同問題的其他人能夠找到答案。祝你好運! – cfs