2012-09-25 40 views
2
環繞文字

我能夠把一個長字符串轉換爲DL列表如下圖所示:清理數據,包裹號碼<dd>和在<dt>使用jQuery

<div class="classA"> 
    <dl id="idA"> Display # 252215425: </dl> 
    <dl id="idB">3 Apples </dl> 
    <dl id="idC">3 Peaches </dl> 
    <dl id="idD">10 Seadless Watermelons </dl> 
    <dl id="idE">23 Bananas </dl> 
</div> 

我想要的結果是:

<div class="classA"> 
    <dl id="idA"> 
     <dd>252215425</dd> 
     <dt>Display #</dt> 
    </dl> 

    <dl id="idB"> 
     <dd>3</dd> 
     <dt>Apples</dt> 
    </dl> 

    <dl id="idC"> 
     <dd>3</dd> 
     <dt>Peaches</dt> 
    </dl> 

    <dl id="idD"> 
     <dd>10</dd> 
     <dt>Seadless Watermelons</dt> 
    </dl> 

    <dl id="idE"> 
     <dd>23</dd> 
     <dt>Bananas</dt> 
    </dl> 
</div> 

的目標,我想實現:1。 每個分割DL內容到一個數組 2.找到號碼,並將其保存在「N」 3.查找文本,並將其保存在「W」 4。包裹「n」wi日「DD」標籤 5.包裝「W」與「DT」標籤 6.「N」 &「W」不應該有領先&尾隨空格

這裏是我想出的代碼,但它沒有工作......

$("div.classA dl").each(function(){ 
     var a = $("div.classA dl").html(); 
     a = a.split(' '); 
     var n = a.match(/d+/); 
     var w = a.match(/D+/); 
     $("div.classA dl").text(''); 
     $("div.classA dl").append('<dd>'n'</dd>'); 
     $("div.classA dl").append('<dt>'w'</dt>'); 

}); 

回答

0

這是相當多了,但你有幾個小問題,在您的代碼:

  1. 要匹配數字,用\d而不是僅僅dD也一樣,應該是\D;
  2. match返回一個數組,因此您需要訪問它的第一個位置以獲取匹配的值;
  3. $.each已經遍歷所有dl s,不需要在循環的每次迭代中再次選擇它們。只需使用this即可引用正在迭代的元素。

這裏是固定的代碼和一個DEMO

$("div.classA dl").each(function() { 
    var $this = $(this); 
    var text = $this.text();   
    var n = text.match(/\d+/)[0]; 
    var w = text.match(/\D+/)[0].replace(/^\s*|\s*$/g, ''); 

    $this.empty(); 

    $("<dd>").text(n).appendTo($this); 
    $("<dt>").text(w).appendTo($this); 
});​ 
+0

如果存在替換的另一種方式的任何想法[0]後 「匹配」?看來我的html編輯器不會做任何事情,但如果我刪除它,結果會改變,但不正確。它確實在jsFiddle中工作。 \ d&\ D同樣的事情,它刪除了\。 – user1672793

+0

@ user1672793:您的編輯正在刪除斜槓\?這是一個非常奇怪的行爲。你有沒有考慮換一個編輯器? –

+0

是的,看起來好像是,它是否影響後面運行的代碼或者我不知道[0]可能與不工作有關。這是我可以粘貼我的代碼的唯一編輯器,因爲我正在插入jQuery代碼來更改供應商的html佈局。編輯是他們的。 – user1672793