欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于jquery的Repeater實現(xiàn)代碼

 更新時間:2010年07月17日 18:00:05   作者:  
本文和大家詳解如何使用javascript來實現(xiàn)一個asp.net 的Repeater控件,叫jQuery.Repeater插件。一起來看下吧。
如何實現(xiàn)一個js版的repeater?
Asp.net WebForm的repeater控件挺好用,我想用js實現(xiàn)一個在Ajax應用中也該還不錯!半年前做了一個jQuery.Repeater插件,并用在了一個項目中,如今拿來曬曬!
原理
項模板為HTML代碼,插件接收json數(shù)據源,讀取模板并創(chuàng)新每一項。
模板HTML
復制代碼 代碼如下:

<ul id='repeater1'>
<li class='itemtempplate'>{列名}</li>
</ul>

json數(shù)據源格式
自個搗鼓的東西格式就自個做主啦:-D . 如下:
{tablename:"表名",rows:[{"列1":"值1"},{"列2":"值2"}.....{"列n":"值n"}]}
擴展原生String對象
為方便使用擴展一個String對象
復制代碼 代碼如下:

//擴展String
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g,"");
}
//
String.prototype.Replace=function (str1,str2){
var rs=this.replace(new RegExp(str1,"gm"),str2);
return rs;
}

將json字符串轉為對象
復制代碼 代碼如下:

//將json數(shù)據轉為對象
function jsonStringToDataTable(jsondata){
try{
var table=eval("("+jsondata+")");
return table;
}
catch(ex){
return null ;
}
}

取網頁元素自身HTML源碼
由于有些瀏覽器(如firefox)不支持outerHTML,特寫了一個toHTML的小插件。
復制代碼 代碼如下:

//取自身HTML源碼的插件.
jQuery.fn.extend({
toHTML:function(){
var obj=$(this[0]);
if(obj[0].outerHTML){
return obj[0].outerHTML;
}
else{
if($('.houfeng-hidearea')==null || $('.houfeng-hidearea')[0]==null ){
$('body').append("<div class='houfeng-hidearea' style='display:none;'></div>");
}
$('.houfeng-hidearea').css('display','none');
$('.houfeng-hidearea').html('');
obj.clone(true).prependTo('.houfeng-hidearea');
var rs= $('.houfeng-hidearea').html();
$('.houfeng-hidearea').html('');
return rs;
}
}
});

插件主要代碼
復制代碼 代碼如下:

jQuery.fn.extend({
Repeater:function(val,ItemCreatedCallBack){//設置或取得數(shù)據源
this.each(function(){
if(val==null || val==undefined){//如果參數(shù)為空返回相應數(shù)據
return $(this).data("_DataSrc");//從緩存返回數(shù)據
}
else{//如果不為空設置數(shù)據源。
//
try{
var valtype=(typeof val).toString();
if(valtype=='string')
val =jsonStringToDataTable(val).rows;
}catch(ex){
return ;
}
//
var domtype=$(this).find(".itemtemplate").attr('nodeName');//查找元素類型
//
if($(this).data("_ItemTemplate")==null ){
$(this).data("_ItemTemplate",$(this).find(".itemtemplate").toHTML());
$(this).find(".itemtemplate").remove();
}
var TrContentTemplate=$(this).data("_ItemTemplate");
//
var fileds=____FindFiled(TrContentTemplate);//找到所有列
if(fileds==null )return false ;
var filedscount=fileds.length;//計算列數(shù)
////
$(this).data("_DataSrc",val); //將數(shù)據放入緩存
var count=val.length;
for(var i=0;i<count ;i++){
////綁定列值
var NewTrContent=TrContentTemplate;
//
NewTrContent=NewTrContent.Replace("{{","{#");
NewTrContent=NewTrContent.Replace("}}","#}");
for( var j=0;j<filedscount;j++){
NewTrContent=NewTrContent.Replace("{"+fileds[j]+"}",val[i][fileds[j].trim()]);
}
NewTrContent=NewTrContent.Replace("{#","{");
NewTrContent=NewTrContent.Replace("#}","}");
//
var area=$(this).find('tbody');
if(area ==null )
area =$(this);
//
area.append(NewTrContent);
if(ItemCreatedCallBack!=null ){
ItemCreatedCallBack($(this).find(domtype+":last"));
}
}
//
$(this).RepeaterSetItemClass($(this).data("_class1"),$(this).data("_class2"),$(this).data("_hoverClass"));
}
});
},
RepeaterClear:function (){//清除數(shù)據
this.each(function(){
if($(this).data("_ItemTemplate")==null ){
$(this).data("_ItemTemplate",$(this).find(".itemtemplate").toHTML());
}
$(this).find(".itemtemplate").remove();
});
},
RepeaterSetItemClass:function (class1,class2,hoverClass){//行樣式
this.each(function(){
if(class1==null || class2==null || hoverClass ==null )
return ;
//將設置存入緩存
$(this).data("_class1",class1);
$(this).data("_class2",class2);
$(this).data("_hoverClass",hoverClass);
//
if($(this).data("_DataSrc")!=null ){
var domtype=$(this).find(".itemtemplate").attr('nodeName');
//
$(this).find(domtype).addClass(class1);
$(this).find(domtype+":nth-child(even)").addClass(class2);
// $(this).find(domtype+":first").removeClass(class1);
//鼠標移動上去顏色變化
$(this).find(domtype).hover(function(){$(this).addClass(hoverClass);},function(){$(this).removeClass(hoverClass);});
}
});
}
});
//查找字段公共方法.
function ____FindFiled(str){//公共方法.
var myRegex = new RegExp("\{.+?\}", "gim");
//var arr = myRegex.exec(str);
var arr=str.match(myRegex);
if(arr ==null )return null ;
var count=arr.length;
for( var i=0;i<count;i++)
{
arr[i]=arr[i].Replace("{","").Replace("}","");
}
return arr ;
}
//----------------------------------------------------------------------

挺亂的,但代碼也簡單,也有注釋,不多說了:-D
如何使用
復制代碼 代碼如下:

$('repeater1').Repeager(data,[ItemCreatedCallBack]);
ItemCreatedCallBack 為可選參數(shù),可以說是項創(chuàng)建事件吧!

如何嵌套?
通過ItemCreatedCallBack回調(或稱事件)
Demo - HTML模板:
復制代碼 代碼如下:

<div id="repeager1">
<div class='itemtemplate'>
<b>{列名}</b>
<ul class="subrepeager">
<!--每多一層嵌套 要 多一層大括號-->
<li class='itemtemplate'>{{列名}}</li>
</ul>
</div>
</div>

Demo - js代碼:
復制代碼 代碼如下:

$(function{
$('repeater1').Repeager(data,itemCreate);
});
function itemCreate(x){
// 在此綁定子repeater
// 參數(shù)X是父repeater的項引用類型為jQuery對象,
// 通過X取得子repeater要用的數(shù)據 并取數(shù)據源 在此綁定子repeater 綁定子repeater
}

源碼下載
作者:houfeng
出處:http://houfeng.cnblogs.com

相關文章

  • jQuery實現(xiàn)購物車計算價格功能的方法

    jQuery實現(xiàn)購物車計算價格功能的方法

    這篇文章主要介紹了jQuery實現(xiàn)購物車計算價格功能的方法,實例分析了jQuery針對html元素的操作技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • jQuery使用prepend()方法在元素前添加內容用法實例

    jQuery使用prepend()方法在元素前添加內容用法實例

    這篇文章主要介紹了jQuery使用prepend()方法在元素前添加內容的方法,實例分析了prepend方法追加內容的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 詳談jQuery Ajax(load,post,get,ajax)的用法

    詳談jQuery Ajax(load,post,get,ajax)的用法

    下面小編就為大家?guī)硪黄斦刯Query Ajax(load,post,get,ajax)的用法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • jQuery中click事件的定義和用法

    jQuery中click事件的定義和用法

    這篇文章主要介紹了jQuery中click事件的定義和用法,以實例形式詳細分析了jQuery中的click事件具體定義方法、參數(shù)及用法實例,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • jquery遍歷checkbox的注意事項說明

    jquery遍歷checkbox的注意事項說明

    本篇文章主要是對jquery遍歷checkbox的注意事項進行了說明介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • 創(chuàng)建公共調用 jQuery Ajax 帶返回值

    創(chuàng)建公共調用 jQuery Ajax 帶返回值

    請求Ajax 帶返回值,并彈出提示框提醒的實現(xiàn)代碼,需要的朋友可以參考下
    2012-08-08
  • jQuery DOM節(jié)點的遍歷方法小結

    jQuery DOM節(jié)點的遍歷方法小結

    本篇文章主要介紹了jQuery DOM節(jié)點的遍歷方法小結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • jquery對象和javascript對象即DOM對象相互轉換

    jquery對象和javascript對象即DOM對象相互轉換

    對于已經是一個 DOM 對象,只需要用 $() 把DOM對象包裝起來,就可以獲得一個 jQuery 對象了,使用[index]和.get(index)可以轉為DOM對象
    2014-08-08
  • jquery實現(xiàn)點擊展開列表同時隱藏其他列表

    jquery實現(xiàn)點擊展開列表同時隱藏其他列表

    這篇文章主要介紹了jquery實現(xiàn)點擊展開列表同時隱藏其他列表的方法,涉及jquery鼠標事件及節(jié)點的遍歷與屬性操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 解析jquery中的ajax緩存問題

    解析jquery中的ajax緩存問題

    現(xiàn)在我要在瀏覽器里讀取緩存,因為ajax請求的數(shù)據很大,請求一次就夠了。但是問題來了,在FF里面,是沒有ajax緩存的,也就是每次都會觸發(fā)ajax請求,這點和IE不一樣
    2013-12-12

最新評論