Giter VIP home page Giter VIP logo

scopedqueryselectorshim's Introduction

scopedQuerySelectorShim

querySelector/querySelectorAll shims that enable the use of :scope

What is :scope in the context of querySelector?

:scope, when combined with the immediate child selector >, lets you query for elements that are immediate children of a HTMLElement instance.

For instance, you might want to find all list items of an unordered list that is an immediate child of node:

var listItems = node.querySelector(':scope > ul > li');

This is effectively equivalent to using jQuery's find():

var $listItems = $(node).find('> ul > li');

See the Mozilla Developer Network article on :scope for more information.

Usage

Simply include the JavaScript file:

<script src="scopeQuerySelectorShim.js"></script>

Notes

  • Tests :scope support before inserting itself, and uses it if it's available
    • Falls back to an ID-based querySelector call against the the parent if not
  • Shimmed querySelectorAll returns a NodeList, just like the native method
  • Can be called on an element that does not have an ID
  • Can be called on an element that is not currently in the DOM
  • Modifies HTMLElement.prototype
  • Document.prototype's querySelector/querySelectorAll methods are not shimmed
    • :scope is not relevant at the document level
    • Use document.documentElement.querySelector instead without :scope

Tests

To run the tests:

npm install
grunt test

License

scopedQuerySelectorShim is licensed under the permissive BSD license.

scopedqueryselectorshim's People

Contributors

jpdevries avatar lazd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

scopedqueryselectorshim's Issues

IE8 not supporting HTMLElement

I'm running into problems with this polyfill in IE8, which doesn't support HTMLElement, but does support querySelectorAll. A solution that seems to work on IE8 is to shim HTMLElement to Element in the beginning of the script like so:

// for older browsers that don't support HTMLElement but querySelectorAll (like IE8)
if(typeof HTMLElement === 'undefined'){
  HTMLElement = Element;  
}

Not sure about the consequences on other browsers though.

mixed selectors returning undesired elements

I've quickly reviewed this poly since somebody asked me to bring :scope in dom4.

It looks OK but there is a gotcha, maybe an edge case, that is quite confusing/problematic.

giveng the following body

<body>
  <div id=div-a><h1>H1</h1><ul><li class="checked"></li></ul></div>
  <div id=div-b><ul><li class="checked"></li></ul></div>
</body>

retrieve the h1 and every .checked in the first div

const div = window['div-a'];
div.querySelectorAll(':scope > h1, .checked');

the expected standard result is a list of two elements, all contained in the div one.

Am I correct in believing this polyfill will instead return 3 elements, including the LI that is inside the #div-b one?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.