पूरा: गुंजाइश पॉलीफ़िल
जैसा कि ऐसेटिस्क ने उल्लेख किया है चयनकर्ता एपीआई 2 :scope
छद्म चयनकर्ता का उपयोग करता है ।
इस काम को सभी ब्राउज़रों में करने के लिए (वह समर्थन querySelector
) यहाँ पॉलीफ़िल है
(function(doc, proto) {
try { // check if browser supports :scope natively
doc.querySelector(':scope body');
} catch (err) { // polyfill native methods if it doesn't
['querySelector', 'querySelectorAll'].forEach(function(method) {
var nativ = proto[method];
proto[method] = function(selectors) {
if (/(^|,)\s*:scope/.test(selectors)) { // only if selectors contains :scope
var id = this.id; // remember current element id
this.id = 'ID_' + Date.now(); // assign new unique id
selectors = selectors.replace(/((^|,)\s*):scope/g, '$1#' + this.id); // replace :scope with #ID
var result = doc[method](selectors);
this.id = id; // restore previous id
return result;
} else {
return nativ.call(this, selectors); // use native code for other selectors
}
}
});
}
})(window.document, Element.prototype);
प्रयोग
node.querySelector(':scope > someselector');
node.querySelectorAll(':scope > someselector');
ऐतिहासिक कारणों से, मेरा पिछला समाधान
सभी उत्तरों के आधार पर
// Caution! Prototype extending
Node.prototype.find = function(selector) {
if (/(^\s*|,\s*)>/.test(selector)) {
if (!this.id) {
this.id = 'ID_' + new Date().getTime();
var removeId = true;
}
selector = selector.replace(/(^\s*|,\s*)>/g, '$1#' + this.id + ' >');
var result = document.querySelectorAll(selector);
if (removeId) {
this.id = null;
}
return result;
} else {
return this.querySelectorAll(selector);
}
};
प्रयोग
elem.find('> a');