diff options
author | Timmy Willison <timmywillisn@gmail.com> | 2016-01-27 12:57:04 -0500 |
---|---|---|
committer | Timmy Willison <timmywillisn@gmail.com> | 2016-01-28 17:25:41 -0500 |
commit | 25068bf2c664e05d5ae48d8d2fb480ee572d3b97 (patch) | |
tree | 1be85c81ece64e18572df9da6ce49a3ed010ce77 /src | |
parent | a8c0194d3d58fd064e2c4f8b3cad17f7eb77ebfc (diff) | |
download | jquery-25068bf2c664e05d5ae48d8d2fb480ee572d3b97.tar.gz jquery-25068bf2c664e05d5ae48d8d2fb480ee572d3b97.zip |
Selector: add jQuery.escapeSelector
Fixes gh-1761
Close gh-2878
Diffstat (limited to 'src')
-rw-r--r-- | src/selector-native.js | 30 | ||||
-rw-r--r-- | src/selector-sizzle.js | 1 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/selector-native.js b/src/selector-native.js index ee8148342..3b2525d69 100644 --- a/src/selector-native.js +++ b/src/selector-native.js @@ -37,7 +37,26 @@ var hasDuplicate, sortInput, documentElement.webkitMatchesSelector || documentElement.mozMatchesSelector || documentElement.oMatchesSelector || - documentElement.msMatchesSelector; + documentElement.msMatchesSelector, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }; function sortOrder( a, b ) { @@ -110,7 +129,14 @@ function uniqueSort( results ) { return results; } +function escape( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +} + jQuery.extend( { + uniqueSort: uniqueSort, + unique: uniqueSort, + escapeSelector: escape, find: function( selector, context, results, seed ) { var elem, nodeType, i = 0; @@ -140,8 +166,6 @@ jQuery.extend( { return results; }, - uniqueSort: uniqueSort, - unique: uniqueSort, text: function( elem ) { var node, ret = "", diff --git a/src/selector-sizzle.js b/src/selector-sizzle.js index dcee45f37..462cd240a 100644 --- a/src/selector-sizzle.js +++ b/src/selector-sizzle.js @@ -10,5 +10,6 @@ jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; } ); |