jQueryの各種メソッドをes6で再現する
jQueryの各種メソッドをes6で再現する:
onメソッドの代替としてaddEventListenerMultiを定義。
複数のイベント指定に対応し、NodeListやHTMLCollectionが対象でもこれを処理する。
もちろん
onメソッドの代替
jQuery
var $btnElements = $('.btn');
$btnElements.on('mouseenter mouseleave', function (event) {
var $this = $(this);
if (event.type === 'mouseenter') {
$this.addClass('hover');
} else {
$this.removeClass('hover');
}
});
es6
// addEventListenerMulti の定義
Object.prototype.addEventListenerMulti = function addEventListenerMulti (events, callback) {
let target = (/(NodeList|HTMLCollection)/).test(Object.prototype.toString.call(this)) ? this : [this];
events.split(' ').forEach(event => {
Array.prototype.forEach.call(
target,
elm => elm.addEventListener(event, event => callback(event)),
);
});
};
const btnElements = document.querySelectorAll('.btn');
btnElements.addEventListenerMulti('mouseenter mouseleave', event => {
const target = event.target;
if (event.type === 'mouseenter') {
target.classList.add('hover');
} else {
target.classList.remove('hover');
}
});
複数のイベント指定に対応し、NodeListやHTMLCollectionが対象でもこれを処理する。
もちろん
getElementsById()などの直接指定にも対応する。
val()の代替
jQuery
var rdElements = $('[name=sample]');
console.log(rdElements.val());
es6
// checkValを定義
Object.prototype.checkVal = function checkVal() {
let result = Array.prototype.filter.call(
this, elm => elm.checked,
);
if (this.item(0).type === 'radio') {
result = result[0].value;
} else if (this.item(0).type === 'checkbox') {
result = result.map(elm => elm.value);
}
return result;
};
const rdElements = document.getElementsByName('sample');
console.log(rdElements.checkVal());
input[type='radio']の場合チェックされたvalueを、input[type='check']の場合チェックされたvalueの配列を返す。
コメント
コメントを投稿