jQuery插件編寫學習中碰見的問題--attr prop

我的博客:css

https://chenjiahao.xyzhtml


 

最近在學習jQuery的插件的編寫,有兩種方式,$.fn.extend以及$.extend,一種是做用於對象原型上,一種是直接做用於jQuery對象。我接下來編寫的是表格奇偶數不一樣色,checkbox選擇則高亮顯示,使用的$.fn.extend。具體html以下:學習

<table id="table1">
    <thead>
        <tr>
            <th></th>
            <th>姓名</th>
            <th>性別</th>
            <th>所在地</th>
        </tr>
    </thead>
    <tbody>
    <tr>
        <td><input type="checkbox"/></td>
        <td>張三</td>
        <td></td>
        <td>浙江杭州</td>
    </tr>
    <tr>
        <td><input type="checkbox"/></td>
        <td>李四</td>
        <td></td>
        <td>湖南長沙</td>
    </tr>
    <tr>
        <td><input type="checkbox"/></td>
        <td>王二</td>
        <td></td>
        <td>浙江溫州</td>
    </tr>
    <tr>
        <td><input type="checkbox"/></td>
        <td>McChen</td>
        <td></td>
        <td>北京</td>
    </tr>
    <tr>
        <td><input type="checkbox"/></td>
        <td>NVSHEN</td>
        <td></td>
        <td>浙江杭州</td>
    </tr>
    </tbody>
</table>

html無非就是一個簡單的表格而已。接下來是我隨意設置的樣式,這個全憑我的喜愛啦~~測試

 .even { background:#FFF38F;} .odd { background: #FFFFEE;} .selected { background: #ff0000;} this

簡單說一下 even是偶數行樣式,odd是奇數行樣式,selected是選中的樣式即高亮。spa

接下來是重點,碰見的問題也在這。先附上使用attr時的代碼。插件

 1 ;(function ($) {
 2     $.fn.extend({
 3         "tableColor": function (options) {
 4             return this.each(function () {
 5                 var aaa = $.extend({
 6                     odd : "odd",
 7                     even : "even",
 8                     selected : "selected"
 9                 },options);
10                 $("tbody>tr:odd",this).addClass(aaa.odd);
11                 $("tbody>tr:even",this).addClass(aaa.even);
12                 $("tbody>tr",this).on("click",function () {
13                     var hasSelected = $(this).hasClass(aaa.selected);  //判斷是否選中
14                     //判斷是否選中而後增長或移除class
15                     $(this)[hasSelected?"removeClass":"addClass"](aaa.selected)
16                         .find(":checkbox").attr("checked",!hasSelected);
17 
18                         //console.log(1)
19                 });
20                 $("tbody>tr:has(:checked)",this).addClass(aaa.selected);
21                 return this;
22             })
23         }
24     })
25 })(jQuery);
26 //------------------------以上是插件編寫的代碼

 接下來是插件的使用方法。3d

1 //------------------------開始測試插件的應用
2 $(function () {
3     $("#table1").tableColor()
4         .find("th").css("color","red");
5 })

我的看來jq插件須要具有最基本的兩點,一能夠自定義參數,二返回的是對象能夠進行鏈式操做。code

讓咱們一塊兒看看使用attr設置checked的時候的效果圖。htm

而後咱們將16行中attr換成prop,效果圖以下:

 

當咱們使用attr設置checked屬性時,發現只有初次生效,解決的辦法是使用prop。

至於緣由,我也只能淺析地說一下我我的見解:

官方對於prop()的解釋是獲取在匹配的元素集中的第一個元素的屬性值,它的返回值不一樣於attr,爲true或false。(attr返回checked或""),所以總結一下適用範圍:

1.添加屬性名稱該屬性就會生效應該使用prop();
2.是有true,false兩個屬性使用prop();
3.其餘則使用attr();

 

可是,官方推薦使用的是attr,這我有點不知甚解。

 

--------------------------以上純屬本人拙見,若有錯誤之處,懇請指出!~謝謝------------------------

相關文章
相關標籤/搜索