私はElement.matches
のためのメソッドをpolyfillしたいです。
私はMDNにこれらのコードを見つけました:なぜelement.matchesのpolyfillが機能しないのですか
if (!Element.prototype.matches) {
Element.prototype.matches =
Element.prototype.matchesSelector ||
Element.prototype.mozMatchesSelector ||
Element.prototype.msMatchesSelector ||
Element.prototype.oMatchesSelector ||
Element.prototype.webkitMatchesSelector ||
function(s) {
var matches = (this.document ||
this.ownerDocument).querySelectorAll(s),
i = matches.length;
while (--i >= 0 && matches.item(i) !== this) {}
return i > -1;
};
}
だから私のようないくつかのコードの書き込み:
function matches(node, selector) {
if (node.matches) {
return node.matches(selector)
}
const match = node.matchesSelector ||
node.webkitMatchesSelector ||
node.mozMatchesSelector ||
node.msMatchesSelector ||
node.oMatchesSelector ||
function (s) {
const matches = (node.ownerDocument || document).querySelectorAll(s)
let i = matches.length
while (--i >= 0 && matches[i] !== node) {}
return i > -1
}
return match(selector)
}
もののを、私はこれはIE 除いてほとんどのブラウザ上で動作します知っている私は、コードの大部分を削除しましたそして、IEのためにそれをテストし、これが働いた:
function match(node, selector) {
return node.msMatchesSelector(selector)
}
私はこれが動作しない理由を不思議に思う:
function match(node, selector) {
var isMatch = node.msMatchesSelector
return isMatch(selector)
}
[JavaScript関数のエイリアシングが動作しないようです](https://stackoverflow.com/questions/1007340/javascript-function-aliasing-doesnt-seem-to-work) – Andreas
'querySelector ) 'を' querySelectorAll() 'の代わりにpolyfillに入れて、返された値に' .length'がなく、ループを入力することはできません。 –
ええ、あなたは正しいです、私はそれを見つけて収集しましたが、それでも動作しませんでした。 –