2011-06-10 50 views
1

我有一個數字列表,我需要自動將它們變成條形碼。我可以得到第一個改變,但是我不能在改變之後得到那些。我有一個jQuery條碼生成器。我對此很新。請幫忙。根據班級添加條形碼多少次

<table width=180 border=0 cellpadding=0 cellspacing=0> 
    <tr> 
    <td class="barcode_needed">10133</td> 
    </tr> 
    <tr> 
    <td class="barcode_needed">20133</td> 
    </tr> 
    <tr> 
    <td class="barcode_needed">30133</td> 
    </tr> 
</table> 


<link rel="stylesheet" type="text/css" href="http://barcode-coder.com/css/style.css?ft=1298939919" /> 
<script type="text/javascript" src="http://barcode-coder.com/js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="http://barcode-coder.com/js/jquery-ui-1.7.custom.min.js"></script> 
<script type="text/javascript" src="http://barcode-coder.com/js/jquery-barcode-last.min.js"></script> 


<script> 
    $("td.barcode_needed").after("<div id='bcTarget1'>"); 
    $("#bcTarget1").barcode(('G' + $("td.barcode_needed").html()), "code128"); 
</script> 

回答

3

您的問題是要創建多個<div>元素具有相同id屬性。當你這樣做:

$("#bcTarget1") 

jQuery將只能找到第一個,所以你只能得到一個條形碼。您還將<div>作爲<tr>的孩子插入,以此混合您的元素。

首先,解決您的HTML結構(包括重複id屬性):

$('td.barcode_needed').append('<div class="bcTarget">'); 

這使你的<div><td>內(讓你的元素嵌套是正確的),並取代id屬性與class

然後,通過引用下一個結構來修復條形碼。

$('.bcTarget').each(function() { 
    var $this = $(this); 
    $this.barcode(
     'G' + $this.closest('td.barcode_needed').text(), 
     'code128' 
    ); 
}); 

closest呼叫沿樹向上找到與選擇器匹配的最接近的祖先。您可以在表格單元格上使用text,因爲您剛剛添加的<div>在您撥打.text時仍然爲空。

活生生的例子:http://jsfiddle.net/ambiguous/eaYTZ/

你可能會想與造型有點當然玩。

+0

完美的工作。謝謝。此代碼運行多次,因爲我必須將其附加到我的每個訂單中。我分批打印我的訂單,以便jquery多出現一次。有沒有一種方法可以讓jquery只在頁面上顯示的最後時間運行。我希望我只能寫一次,但在這種情況下這是不可能的。 – user764728 2011-06-10 03:43:09

+0

@ user764728:我認爲每頁添加一個'$(document).ready(...)'調用是最簡單的。你可以設置一個全局的「我已經添加了條形碼」標誌,並且如果該標誌被設置,使'each'回調不做任何事情,然後在每個'.each'後面設置標誌爲真。這有點破解,但它會以最少的工作完成這項工作。 – 2011-06-10 04:05:56

+0

@ user764728:更好的快速入侵方法是檢查'$ this'是否有任何子節點,如果沒有,則不做任何事情,如果它不執行'$ this.barcode(...)'東西。 – 2011-06-10 04:10:24