jQuery 실전 독서 노트(7장 확장 jQuery)
1.1 파일 및 함수 이름 지정
(function($){
//
//플러그인 정의
//
})(jQuery);
1.3 단순화 매개변수 목록
options 산열 값을 사용합니다.
예: complex(valueA, {p7: valueB});
complex(valueA, {
p3: valueC,
p4: valueD,
p7: valueB
});
간소화된 함수 서명:complex(p1,options)
함수에서 $.extend()는 이러한 옵션을 기본값과 결합합니다.
function complex(p1, options) {
var settings = $.extend({
option1: defaultValue1,
option2: defaultValue2,
option3: defaultValue3
}, options || {});
//함수 기타 부분
}
2. 사용자 정의 유틸리티 작성
유틸리티 함수는 DOM 요소를 조작하기 위한 것이 아니라 jQuery ($) 속성으로 정의된 함수입니다.
$.say = function(what) { alert('I say ' + what); };
가능: jQuery.say = function(what) { alert('I say ' + what); };
가장 안전한 쓰기:
(function($){
$.say = function(what) { alert('I say ' + what); };
})(jQuery);
2.1 데이터 조작을 만드는 실용 함수
이러한 실용 함수를 만듭니다: $.toFixedWidth(value, length, fill)
(function($) {
$.toFixedWidth = function(value, length, fill) {
var result = (value || '').toString();
fill = fill || '0';
var padding = length - result.length;
if (padding < 0) {
result = result.substr(-padding);
} else {
for (var n = 0; n < padding; n++)
result = fill + result;
}
return result;
};
})(jQuery);
유틸리티에 네임스페이스를 추가하려면 다음과 같이 하십시오.
$.jQiaDataFormatter = {};
$.jQiaDataFormatter.toFixedWidth = function(value, length, fill){...};
2.2 날짜 형식 작성기
구문: $.formatDate(date, pattern)
yyyy
yy
MMMM
MMM
MM
M
dd
d
EEEE
EEE
a
HH
H
hh
h
mm
m
ss
s
S
(function($){
$.formatDate = function(date,pattern) {
var result = [];
while (pattern.length>0) {
$.formatDate.patternParts.lastIndex = 0;
var matched = $.formatDate.patternParts.exec(pattern);
if (matched) {
result.push($.formatDate.patternValue[matched[0]].call(this,date));
pattern = pattern.slice(matched[0].length);
}
else {
result.push(pattern.charAt(0));
pattern = pattern.slice(1);
}
}
return result.join('');
};
$.formatDate.patternParts =
/^(yy(yy)?|M(M(M(M)?)?)?|d(d)?|EEE(E)?|a|H(H)?|h(h)?|m(m)?|s(s)?|S)/;
$.formatDate.monthNames = [
'January','February','March','April','May','June','July',
'August','September','October','November','December'
];
$.formatDate.dayNames = [
'Sunday','Monday','Tuesday','Wednesday','Thursday','Friday',
'Saturday'
];
$.formatDate.patternValue = {
yy: function(date) {
return $.toFixedWidth(date.getFullYear(),2);
},
yyyy: function(date) {
return date.getFullYear().toString();
},
MMMM: function(date) {
return $.formatDate.monthNames[date.getMonth()];
},
MMM: function(date) {
return $.formatDate.monthNames[date.getMonth()].substr(0,3);
},
MM: function(date) {
return $.toFixedWidth(date.getMonth()+1,2);
},
M: function(date) {
return date.getMonth()+1;
},
dd: function(date) {
return $.toFixedWidth(date.getDate(),2);
},
d: function(date) {
return date.getDate();
},
EEEE: function(date) {
return $.formatDate.dayNames[date.getDay()];
},
EEE: function(date) {
return $.formatDate.dayNames[date.getDay()].substr(0,3);
},
HH: function(date) {
return $.toFixedWidth(date.getHours(),2);
},
H: function(date) {
return date.getHours();
},
hh: function(date) {
var hours = date.getHours();
return $.toFixedWidth(hours>12 ? hours - 12 : hours,2);
},
h: function(date) {
return date.getHours()%12;
},
mm: function(date) {
return $.toFixedWidth(date.getMinutes(),2);
},
m: function(date) {
return date.getMinutes();
},
ss: function(date) {
return $.toFixedWidth(date.getSeconds(),2);
},
s: function(date) {
return date.getSeconds();
},
S: function(date) {
return $.toFixedWidth(date.getMilliseconds(),3);
},
a: function(date) {
return date.getHours() < 12 ? 'AM' : 'PM';
}
};
$.toFixedWidth = function(value,length,fill) {
var result = (value || '').toString();
fill = fill || '0';
var padding = length - result.length;
if (padding < 0) {
result = result.substr(-padding);
}
else {
for (var n = 0; n < padding; n++) result = fill + result;
}
return result;
};
})(jQuery);
3. 새로운 포장기 추가 방법
생성 모드: $.fn.wrapperFunctionName = function(params){ fucntion-body };
예:
(function($){
$.fn.makeItblue = function() {
return this.css('color', 'blue');
};
})(jQuery);
참고: $.fn은 대상 내부prototype 속성의 별명입니다.
경고: 포장기 주체 부분의 함수 상하문 (this)은 포장 집합을 가리키지만, 이 함수에서 내연 함수를 설명할 때, 모든 내연 함수는 자신의 함수 상하문이 있습니다.이때 this를 사용하면 조심해야 합니다!
새로운 포장기 방법을 정의할 때 매우 중요한 원칙이 하나 더 있다. 특정한 값을 되돌려주지 않으면 함수는 항상 포장 집합을 되돌려주는 값으로 해야 한다.이것은 새로운 방법이 모든 jQuery 방법 체인에 참여할 수 있도록 합니다.
각 포장 요소를 개별적으로 처리하는 모드:
(function($) {
$.fn.someNewMethod = function() {
return this.each(function() {
//
//this는 단일 DOM 요소를 가리킵니다.
//
});
};
})(jQuery);
예:
(function($) {
$.fn.makeItBlueOrRed = function() {
return this.each(function() {
$(this).css('color', $(this).is('[id]') ? 'blue' : 'red');
});
};
})(jQuery);
이 예는 단지 시범을 보일 뿐 실제로는 다음과 같이 간소화할 수 있다.
(function($) {
$.fn.makeItBlueOrRed = function() {
return this.css('color', function() {
return $(this).is('[id]') ? 'blue' : 'red');
});
};
})(jQuery);
3.1 포장기 방법에 여러 가지 조작 적용
예: setReadOnly(state) state는true이고 문자의 불투명도를 0.5로 설정하면 읽기 전용입니다.
(function($){
$.fn.setReadOnly = function(readonly) {
return this.filter('input:text')
.attr('readOnly', readonly)
.css('opacity', readonly ? 0.5 : 1.0)
.end();
};
})(jQuery);
3.2 포장기 방법에 보관된 상태
메서드 구문: options
options:
firstControl
lastControl
nextControl
photoElement
playControl
previousControl
transformer
delay - ms, 기본 3000
사용법:
$('#thumbnailsPane img').photomatic({
photoElement: '#photoDisplay',
previousControl: '#previousButton',
nextControl: '#nextButton',
firstControl: '#firstButton',
lastControl: '#lastButton',
playControl: '#playButton',
delay: 1000
});
구현:
(function($){
$.fn.photomatic = function(options) {
var settings = $.extend({
photoElement: 'img.photomaticPhoto',
transformer: function(name) {
return name.replace(/thumbnail/,'photo');
},
nextControl: null,
previousControl: null,
firstControl: null,
lastControl: null,
playControl: null,
delay: 3000
},options||{});
function showPhoto(index) {
$(settings.photoElement)
.attr('src',
settings.transformer(settings.thumbnails$[index].src));
settings.current = index;
}
settings.current = 0;
settings.thumbnails$ = this.filter('img');
settings.thumbnails$
.each(
function(n){ $(this).data('photomatic-index',n); }
)
.click(function(){
showPhoto($(this).data('photomatic-index'));
});
$(settings.photoElement)
.attr('title','Click for next photo')
.css('cursor','pointer')
.click(function(){
showPhoto((settings.current+1) % settings.thumbnails$.length);
});
$(settings.nextControl).click(function(){
showPhoto((settings.current+1) % settings.thumbnails$.length);
});
$(settings.previousControl).click(function(){
showPhoto((settings.thumbnails$.length+settings.current-1) %
settings.thumbnails$.length);
});
$(settings.firstControl).click(function(){
showPhoto(0);
});
$(settings.lastControl).click(function(){
showPhoto(settings.thumbnails$.length-1);
});
$(settings.playControl).toggle(
function(event){
settings.tick = window.setInterval(
function(){ $(settings.nextControl).triggerHandler('click'); },
settings.delay);
$(event.target).addClass('photomatic-playing');
$(settings.nextControl).click();
},
function(event){
window.clearInterval(settings.tick);
$(event.target).removeClass('photomatic-playing');
});
showPhoto(0);
return this;
};
})(jQuery);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 전후 예이 기사에서는 jquery after() 및 before() 메소드의 예를 볼 것입니다. before() 메서드는 선택한 요소 앞에 지정된 콘텐츠를 삽입합니다. after() 메서드는 선택한 요소 뒤에 지정된 콘텐츠...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.