근사한 방법의 실현
7510 단어 방법
예를 들어 append,prepend,before,after 이 몇 가지 방법은 jQuery2.0에서 다음과 같다.
append: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
this.appendChild( elem );
}
});
},
prepend: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
this.insertBefore( elem, this.firstChild );
}
});
},
before: function() {
return this.domManip(arguments, false, function( elem ) {
if ( this.parentNode ) {
this.parentNode.insertBefore( elem, this );
}
});
},
after: function() {
return this.domManip(arguments, false, function( elem ) {
if ( this.parentNode ) {
this.parentNode.insertBefore( elem, this.nextSibling );
}
});
},
mass Framework는 이렇게 이루어졌고 반전 방법까지 함께 이루어졌다.
//
"append,prepend,before,after,replace".replace($.rword, function(method) {
$.fn[method] = function(item) {
return manipulate(this, method, item, this.ownerDocument);
};
$.fn[method + "To"] = function(item) {
$(item, this.ownerDocument)[method](this);
return this;
};
});
jQuery는 노드를 제거하는 세 가지 방법이 있습니다. 2.0의 실현은 다음과 같습니다.
// keepData is for internal use only--do not document
remove: function( selector, keepData ) {
var elem,
i = 0,
l = this.length;
for ( ; i < l; i++ ) {
elem = this[ i ];
if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( getAll( elem ) );
}
if ( elem.parentNode ) {
if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
setGlobalEval( getAll( elem, "script" ) );
}
elem.parentNode.removeChild( elem );
}
}
}
return this;
},
empty: function() {
var elem,
i = 0,
l = this.length;
for ( ; i < l; i++ ) {
elem = this[ i ];
if ( elem.nodeType === 1 ) {
// Prevent memory leaks
jQuery.cleanData( getAll( elem, false ) );
// Remove any remaining nodes
elem.textContent = "";
}
}
return this;
},
detach: function( selector ) {
return this.remove( selector, true );
},
mass Framework는 함께 놓아줍니다.
"remove,empty,detach".replace($.rword, function(method) {
$.fn[method] = function() {
var isRemove = method !== "empty";
for (var i = 0, node; node = this[i++]; ) {
if (node.nodeType === 1) {
//
var array = $.slice(node[TAGS]("*")).concat(isRemove ? node : []);
if (method !== "detach") {
array.forEach(cleanNode);
}
}
if (isRemove) {
if (node.parentNode) {
node.parentNode.removeChild(node);
}
} else {
while (node.firstChild) {
node.removeChild(node.firstChild);
}
}
}
return this;
}
});
순환 생성은 예술로 그들의 기능과 공통점을 깊이 이해하고 특이점을 하나의 대상으로 구성해야 한다. 이렇게 하면 방법 내의ifelse를 최소화할 수 있다.
또한 동적 해석 스크립트도 좋은 방법입니다. mass Framework라는 오래된 코드를 보십시오.
//
$.fn.fadeIn = function(duration, complete) {
var opts = {
duration: duration,
complete: complete,
effectName: "fadeIn",
classRule: ".#{className}{
\
#{prefix}animation-duration: #{duration};\
#{prefix}animation-name: #{frameName}; \
#{prefix}animation-fill-mode:forwards; \
}",
frameRule: "@#{prefix}keyframes #{frameName}{\
to{\
opacity:1;\
}\
}",
after: function(node) {
node.style.opacity = 1;
}
}
return makeEffect(this, opts);
}
//
$.fn.fadeOut = function(duration, complete) {
var opts = {
duration: duration,
complete: complete,
effectName: "fadeOut",
classRule: ".#{className}{
\
#{prefix}animation-duration: #{duration};\
#{prefix}animation-name: #{frameName}; \
#{prefix}animation-fill-mode:forwards; \
}",
frameRule: "@#{prefix}keyframes #{frameName}{\
to{\
opacity:0;\
}\
}",
after: function(node) {
node.style.opacity = 0;
}
}
return makeEffect(this, opts);
}
이 두 가지 방법은 원본 코드에서 두 군데만 다르기 때문에 나중에 나는 이렇게 고쳤다.
$.fn.fadeIn = function(duration, complete) {
var opts = {
duration: duration,
complete: complete,
effectName: "fadeIn",
classRule: ".#{className}{
\
#{prefix}animation-duration: #{duration};\
#{prefix}animation-name: #{frameName}; \
#{prefix}animation-fill-mode:forwards; \
}",
frameRule: "@#{prefix}keyframes #{frameName}{\
to{\
opacity:1;\
}\
}",
after: function(node) {
node.style.opacity = 1;
}
}
return makeEffect(this, opts);
}
//
$.fn.fadeOut = eval("0," + $.fn.fadeIn.toString().replace("1;","0;").replace("faceIn", "fadeOut"))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【프로젝트 관리】history 파일의 방법프로젝트를 관리 할 때 폴더의 이름과 변경 내역으로 추천을 소개합니다. 그렇다면 좋다거나 다른 사람이 있으면 연락주십시오. 폴더를 만드는 방법 [프로젝트 이름] ➕[입수자료] ➕[제안 자료] ➕[관리자료] ➕[작성자...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.