aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTimmy Willison <timmywillisn@gmail.com>2016-01-27 12:57:04 -0500
committerTimmy Willison <timmywillisn@gmail.com>2016-01-28 17:25:41 -0500
commit25068bf2c664e05d5ae48d8d2fb480ee572d3b97 (patch)
tree1be85c81ece64e18572df9da6ce49a3ed010ce77 /src
parenta8c0194d3d58fd064e2c4f8b3cad17f7eb77ebfc (diff)
downloadjquery-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.js30
-rw-r--r--src/selector-sizzle.js1
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;
} );