2010-11-02 38 views
1

我正在開發一個網站項目,並且我有一個包含項目列表的段落(它可以很好地作爲ul,但需要保留p)需要具有每個項目的第一個字母加粗。我創建了一個函數來做到這一點:使用javascript迭代字符串並添加標籤

function inserter(string, splitter, skip) { 
    var array = string.split(splitter); 
    var len = array.length; 

    for(var i = 1; i < len; i++) { 
     var a = array[i]; 
     var b = '<b>'; 
     var c = '</b>'; 
     if(a.substr(0, 3) != skip){ 
      array[i] = splitter + b + a.substr(0,1) + c + a.substr(1); 
     } else { 
      array[i] = splitter + a; 
     } 
    } 
    var strFix = array.join(""); 
    return strFix; 
} 

$(function(){ 
    var text = $(".caps").html(); 
    text = inserter(text, ': '); //bold the item after ': ' 
    text = inserter(text, ', ', 'and'); // now bold after the comma ', ' and the skip variable which matches first three letters so the last and doesn't get bold 
    text = inserter(text, ', and '); //now for the item after the last 'and' 
    $(".caps").html(text); 
}); 

但它需要被調用和字符串迭代每一個不同的分路器(這可能破壞網頁上的表現比其中的幾個更多),而且我我想知道如何在一次迭代過程中查看所有分離器?

示例頁面:

http://heidikratzke.com/about.php

當您看到的頁面,你會看到,我將在多個段落jQuery的幻燈片內這樣做。

如果看起來這不會對速度較慢的瀏覽器造成影響,我會保持原樣。

感謝有關如何做得更好的建議。你可以讓

回答

2

一種優化是使用您用來分割字符串拆分到一個數組加入陣列一旦操作完成:

function inserter(string, splitter, skip) { 
    var array = string.split(splitter); 
    var len = array.length; 

    for(var i = 1; i < len; i++) { 
     var a = array[i]; 
     var b = '<b>'; 
     var c = '</b>'; 
     if(a.substr(0, 3) != skip){ 
      array[i] = b + a.substr(0,1) + c + a.substr(1); 
     } else { 
      array[i] = a; 
     } 
    } 
    return array.join(splitter); 

} 

有可能更多,你可以在這裏做的好,但是這個跳到我身上。

進一步優化

下獲取變量聲明退出循環:

function inserter(string, splitter, skip) { 
    var array = string.split(splitter); 
    var len = array.length; 
    var i, a, b='<b>', c='</b>'; 

    for(i = 1; i < len; i++) { 
     a = array[i]; 
     if(a.substr(0, 3) != skip){ 
      array[i] = b + a.substr(0,1) + c + a.substr(1); 
     } else { 
      array[i] = a; 
     } 
    } 

    return array.join(splitter);  
} 
+0

是啊,這是一個好主意 - 我可以去掉else語句完全即可;它只是證明有時你不能在你自己的代碼中看到明顯的東西!謝謝。 – jonkratz 2010-11-02 17:36:01

+0

@JonKratz:如果此答案有幫助,請考慮對其進行upvoting或接受它(單擊複選標記)。這將爲您贏得聲譽和良好的意願,未來您的問題將更有可能得到解答。 – Robusto 2010-11-02 17:51:44

+0

這很有幫助,我很欣賞它,但就回答關於使其更大範圍內的性能更有效的問題(或者如何測試它以確定是否需要)而言,它不會完全回答。 – jonkratz 2010-11-03 20:57:35