jQueryの各種メソッドをes6で再現する

jQueryの各種メソッドをes6で再現する:


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'); 
  } 
}); 
onメソッドの代替としてaddEventListenerMultiを定義。

複数のイベント指定に対応し、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の配列を返す。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2024-02-12 22:08:06 RSSフィード2024-02-12 22:00分まとめ(7件)