Rumah >hujung hadapan web >tutorial js >Analisis kaedah removeAttr() kod sumber jQuery interpretation_jquery

Analisis kaedah removeAttr() kod sumber jQuery interpretation_jquery

WBOY
WBOYasal
2016-05-16 16:13:311285semak imbas

Artikel ini menganalisis kaedah removeAttr() tafsiran kod sumber jQuery dengan lebih terperinci. Kongsikan dengan semua orang untuk rujukan anda. Analisis khusus adalah seperti berikut:

Kaedah yang memanjangkan objek prototaip jQuery:

Salin kod Kod adalah seperti berikut:
jQuery.fn.extend({
//name, masukkan nama atribut elemen DOM yang akan dialih keluar.
​ removeAttr: function( name ) {

//Gunakan objek jQuery.fn, iaitu setiap kaedah objek prototaip jQuery untuk melintasi tatasusunan objek jQuery yang dipilih oleh pemilih semasa dan mengembalikan objek jQuery untuk panggilan berantai.
          kembalikan ini.setiap(fungsi() {
//Panggil kaedah global jQuery removeAttr, masukkan objek DOM yang dilalui ini dan nama atribut yang akan dialih keluar.
jQuery.removeAttr( ini, nama );
});
}
});

kaedah global jQuery removeAttr

Salin kod Kod adalah seperti berikut:
//Perluas kaedah global objek jQuery
jQuery.extend({

//elem ialah setiap objek DOM yang dilalui dan nilai ialah nama atribut yang akan dialih keluar.
RemoveAttr: function(elem, value) {
         nama var, propName,
             i = 0,
//rnotwhite ialah (/S /g)
//Jika nilai ialah " ", nilai bagi ungkapan logik DAN adalah batal
//Jika nilai diandaikan sebagai "href tajuk", kerana kedua-dua operan logikal DAN bukan nilai Boolean, operan kedua akan dikembalikan Pada masa ini, attrNames ialah ["title", "href"].
//match ialah kaedah rentetan JavaScript yang mendapatkan semula nilai yang ditentukan dalam rentetan, atau mencari padanan untuk satu atau lebih ungkapan biasa dan mengembalikan tatasusunan yang menyimpan hasil yang sepadan. Jenis lain akan melaporkan ralat.
               attrNames = value && value.match( rnotwhite );
//Jika attrNames bukan nol dan jenis nod bagi objek DOM semasa ialah 1, masukkan blok pernyataan if, jika tidak, lompat keluar dari fungsi, tamatkan traversal ini dan mulakan traversal seterusnya.
Jika ( attrNames && elem.nodeType === 1 ) {
//Pada masa ini attrNames ialah tatasusunan yang mengandungi nama atribut yang akan dialih keluar, iaitu, ["title", "href"]
// Laksanakan gelung while ini bermakna, mula-mula keluarkan elemen daripada attrNames dan tetapkan ia kepada nama, saya akan meningkat sebanyak 1, dan kemudian tentukan sama ada nama mempunyai nilai Jika ada nilai, masukkan gelung perlaksanaan Selepas pelaksanaan selesai, gelung seterusnya akan bermula Sehingga nama tidak mempunyai nilai, keluar dari gelung.
               manakala ( (nama = attrNames[i ]) ) {
//Jika nama atribut mempunyai nama yang sama dengan kata kunci js seperti "for" dan "class", gantikannya dengan "htmlFor" dan "className".
                     propName = jQuery.propFix[ name ] || name;

//Layanan istimewa jika ia adalah atribut Boolean
Jika ( jQuery.expr.match.bool.test( nama ) ) {
//getSetInput mengesan sama ada elemen Input menyokong getAttribute("value")
//getSetAttribute mengesan sama ada menetapkan nama atribut dalam format penamaan kes unta disokong
//!ruseDefault.test(name) tidak peka huruf besar dan mengesan sama ada nama ialah atribut yang disemak atau dipilih,
Jika ( getSetInput && getSetAttribute || !ruseDefault.test( nama ) ) {
//Mengalih keluar atribut Boolean sebenarnya memberikan nilai kepada false
kepada atribut Boolean elem[ propName ] = palsu;
                       } lain {
//Sokongan ie9 dan ke bawah
//Tukar atribut "default-checked" kepada "defaultChecked" dan tetapkan nilai false
                                  elem[ jQuery.camelCase( "nama lalai-" ) ] =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }
                    } lain {
//Jika ia bukan atribut Boolean, panggil kaedah attr global jQuery untuk menetapkan atribut
jQuery.attr(elem, nama, "");
                }
//getSetAttribute digunakan untuk menguji sama ada setAttribute menyokong penetapan nama atribut dalam format penamaan kes unta Jika ya, anda perlu menggunakan nama atribut yang diperbetulkan apabila menggunakan setAttribute dan getAttribute. (Serasi dengan ie6/7)
//Jika getSetAttibute sama dengan palsu, ini bermakna ia tidak disokong dan nama atribut yang diubah suai digunakan Jika ia disokong, nama atribut asal digunakan.
//Panggil kaedah removeAttribute asli DOM untuk mengalih keluar atribut
                    elem.removeAttribute( getSetAttribute ? name : propName );
            }
}
}
});

Pembetulan atribut kata kunci

Salin kod Kod adalah seperti berikut:
jQuery.extend({
    propFix: {
        „for“: „htmlFor“,
        „class“: „className“
    }
});
jQuery.extend({
    camelCase: function( string ) {
        return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
    }
});
var nodeHook, boolHook,
    attrHandle = jQuery.expr.attrHandle,
    ruseDefault = /^(?:checked|selected)$/i,
    getSetAttribute = support.getSetAttribute,
    getSetInput = support.input;
// Einrichten
div = document.createElement( "div" );
div.setAttribute( "className", "t" );
div.innerHTML = " 
a";
a = div.getElementsByTagName("a")[ 0 ];
// Erste Testreihe.
select = document.createElement("select");
opt = select.appendChild( document.createElement("option") );
input = div.getElementsByTagName("input")[ 0 ];
a.style.cssText = "top:1px";
// SetAttribute für die CamelCase-Klasse testen. Wenn es funktioniert, benötigen wir attrFixes beim Ausführen von get/setAttribute (ie6/7)
support.getSetAttribute = div.className !== "t";

Sie können den Input-Wert eingeben und getAttribute("value")

verwenden

复制代码 代码如下:
// Unterstützung: nur IE8
// Prüfen Sie, ob wir getAttribute("value")
vertrauen können input = document.createElement( "input" );
input.setAttribute( "value", "" );
support.input = input.getAttribute( "value" ) === "";

检测是否布尔值属性

复制代码 代码如下:
booleans = "checked|selected|async|autofocus|autoplay|controls| defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",

matchExpr = {
    „bool“: new RegExp( „^(?:“ booleans „)$“, „i“ )
},

Sie haben die jQuery-Version mit jQuery erstellt.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn