自定義HTML標籤屬性

我們做的網站項目,因爲時間很急,所以爲了快速實現效果,大量採用服務器控件,並將很多處理都放在了服務器端,畢竟有VS.net開發環境,寫C#代碼是很快的。但因爲數據處理集中在了服務器端,所以服務器壓力較大;

舉個簡單例子,在新聞列表的地方,當新聞的標題過長時,需要截取,並在原字符後面加上省略號,然後當鼠標碰上去時,顯示完整標題;

像這個效果,團隊中,有些同事是用javascript中實現,而大多數是用C#實現的;可以想像,新聞頁面上有多少條列表,新聞頁面會同時有多少人訪問,就這一個簡單的運算,服務器要運算多少次;完全可以把它移到客戶端執行,就是用javascript實現該效果;因爲運算分拆到單個的客戶機上,所以用戶訪問時根本不會感覺到不同(現在的PC機運算速度可是相當快的),從而避免了運算集中在服務器執行的惡果。

由於團隊成員中各自的javascript水平相差甚大,不能強制要求所有人去改變,於是我就想用一種簡單的方法來處理這個簡單的問題;想做自定義html標籤來處理;

原意是這樣的。

在HTML的標籤中,如div,p,a,span中,後面會有一些屬性,如
<div style="">
標籤a中<a href='' alt=''/>

在上面效果中,style,href,alt都是標籤屬性,這些是於XML類似的,當然,現在普遍採用的HTML是XHTML,它與XML是兼容的。我們可以用DOM來訪問這些標籤屬性;

通過修改這些方法,我們可以改變標籤的樣式,就是修改style屬性,也可以改變超鏈接的鏈接地址,就是href屬性,等等;工作中經常用的,並不稀奇;

但是並沒有給HTML標籤寫過自定義的屬性,就是給標籤寫一個它並不存在屬性;如
<div TextLength="20"></div>
在HTML中,div標籤並沒有TextLength屬性,是我自已經加的;

假如,頁面中有這樣一段HTML代碼:
<div>新聞列表
         <ul>
           <li> [圖]不按規定線路運營 阻撓執法人員執法 公交車擅改運營線路被查處 [2007-7-31] </li>
           <li> 五金廠已搬遷 眼鏡廠仍擾民 [2007-7-31] </li>
           <li> [圖]“2007香港購物節”正在舉行——市民赴港瘋狂“血拼” [2007-7-27] </li>
           <li>[圖]花園後面的山腳邊,存在大量的亂搭建,街道執法隊展... [2007-7-27] </li>
         </ul>
</div>

我要截取這些字符,當然很容易;用getElementsByTabName取出li標籤列表,用個for循環逐一處理一個就可以了;

但是,字符截多長呢,自然要設變量,這個變量設在哪呢,如果寫在javascript中,這個變量離HTML代碼太遠了(一個在頭部head,一個在body),開發人員不方便操作,因爲在頁面中,它能會有很多這樣的新聞列表或其它列表;於是我想到了給li的父級標籤ul,加自定義屬性,當然,如果是ol也是可以的,只要是li的父級就行;如:

<div>新聞列表
         <ul TextLength="15">
           <li> [圖]不按規定線路運營 阻撓執法人員執法 公交車擅改運營線路被查處 [2007-7-31] </li>
           <li> 五金廠已搬遷 眼鏡廠仍擾民 [2007-7-31] </li>
           <li> [圖]“2007香港購物節”正在舉行——市民赴港瘋狂“血拼” [2007-7-27] </li>
           <li>[圖]花園後面的山腳邊,存在大量的亂搭建,街道執法隊展... [2007-7-27] </li>
         </ul>
</div>

與前面相比,ul多了TextLength屬性,就是我要截取的字符串長度值;然後,我寫了一個函數,來讀取這個屬性,並將該區域的li中字符截短。函數如下:

<script language="javascript" type="text/javascript">
function lineShow()
{
    var list = document.getElementsByTagName("li");  
    for(var i = 0; i < list.length; i ++ )
    {
     // 獲取自定義參數,爲字符長度
var textlength = Number(list[i].parentNode.getAttribute("TextLength"));
      list[i].setAttribute("title", list[i].innerHTML);
      list[i].innerHTML = subString(list[i].innerHTML, textlength);
    }
}
function subString(str, len)
{
    len = len == null || isNaN(len) ? 0 : len;
    if(len < 1 || str.length <= len)return str;
    return str.substr(0, len) + "…";
}
</script>

上面代碼中的語句,都是較常用的,不用過多解釋了。

最後,在頁面載入完畢時,調用該函數就行了。調用函數的代碼如下:
<script language="javascript" type="text/javascript" defer="true">
lineShow();
</script>

這時效果就出現了,頁面中所有列表字符被截短,當鼠標碰上時,顯示其完整標題;

其實上面的javascript並沒有什麼特殊的,很簡單,唯一不同的是,我利用自定義屬性,讓開發人員,在使用這個效果時,更方便了。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章