시뮬레이션 jquery 원리
;(function() {
function JQuery(selector) {
return new JQuery.prototype.init(selector)
}
JQuery.prototype.init = function(selector) {
// this = {}
this.length = 0
let dom = null
// selector , length=0 jq
if (selector) {
// '.dom' / '#dom'
if (typeof selector == 'string') {
if (selector.indexOf('.') != -1) {
dom = document.getElementsByClassName(selector.slice(1))
}
if (selector.indexOf('#') != -1) {
dom = document.getElementById(selector.slice(1))
}
}
// dom
// 1.DOMElement nodeType selector null
// 2.selector instanceof Element ( ) selector null false
// dom , $('').eq(2) dom
if (selector instanceof Element || dom.length == undefined) {
this.length++
this[0] = dom || selector
} else {
for (let i = 0; i < dom.length; i++) {
this[i] = dom[i]
this.length++
}
}
}
return this
}
JQuery.prototype.css = function(attrObj) {
for (let i = 0; i < this.length; i++) {
for (let attr in attrObj) {
this[i].style[attr] = attrObj[attr]
}
}
return this
}
//get 0 1 2 / -1 -2 -3 dom
// / null
JQuery.prototype.get = function(index) {
// if (index == null) {
// return [].slice.call(this, null)
// } else {
// if (index >= 0) {
// return this[index]
// } else {
// return this[index + this.length]
// }
// }
return index == null
? [].slice.call(this, null)
: index >= 0
? this[index]
: this[index + this.length]
}
//eq 0 1 2 / -1 -2 -3 jq
// null jq
JQuery.prototype.eq = function(index) {
let dom =
index == null
? null
: index >= 0
? this[index]
: this[index + this.length]
return this.pushStack(dom)
}
//find
// DOMElement / string / jq jq
JQuery.prototype.find = function(config) {}
//add
JQuery.prototype.add = function(dom) {
let curObejct = JQuery(dom), // jq
baseObject = this, // jq
newObject = JQuery() // jq
for (let i = 0; i < curObejct.length; i++) {
newObject[newObject.length++] = curObejct[i]
}
for (let i = 0; i < baseObject.length; i++) {
newObject[newObject.length++] = baseObject[i]
}
this.pushStack(newObject)
return newObject // jq
}
//end , , preventObject jq
// preventObject , jq
JQuery.prototype.end = function() {
return this.preventObject
}
JQuery.prototype.pushStack = function(deom) {
// end jq , preventObject jq ,
// deom jq jq
if (deom.constructor != JQuery) {
deom = JQuery(deom)
}
deom.preventObject = this
return deom
}
JQuery.prototype.init.prototype = JQuery.prototype
window.$ = window.JQuery = JQuery
})()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.