Commit f9a58497 authored by John Resig's avatar John Resig

Now handle the case where Safari's querySelectorAll fails on uppercase...

Now handle the case where Safari's querySelectorAll fails on uppercase characters in quirks mode. Added a test to check for it and re-worked some of the existing tests to better handle document order issues. Fixes jQuery bug #3840.
parent 9b3804a8
...@@ -709,7 +709,14 @@ try { ...@@ -709,7 +709,14 @@ try {
})(); })();
if ( document.querySelectorAll ) (function(){ if ( document.querySelectorAll ) (function(){
var oldSizzle = Sizzle; var oldSizzle = Sizzle, div = document.createElement("div");
div.innerHTML = "<p class='TEST'></p>";
// Safari can't handle uppercase or unicode characters when
// in quirks mode.
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
return;
}
Sizzle = function(query, context, extra, seed){ Sizzle = function(query, context, extra, seed){
context = context || document; context = context || document;
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
<p id="firstp">See <a id="simon1" href="http://simon.incutio.com/archive/2003/03/25/#getElementsBySelector" rel="bookmark">this blog entry</a> for more information.</p> <p id="firstp">See <a id="simon1" href="http://simon.incutio.com/archive/2003/03/25/#getElementsBySelector" rel="bookmark">this blog entry</a> for more information.</p>
<p id="ap"> <p id="ap">
Here are some links in a normal paragraph: <a id="google" href="http://www.google.com/" title="Google!">Google</a>, Here are some links in a normal paragraph: <a id="google" href="http://www.google.com/" title="Google!">Google</a>,
<a id="groups" href="http://groups.google.com/">Google Groups (Link)</a>. <a id="groups" href="http://groups.google.com/" class="GROUPS">Google Groups (Link)</a>.
This link has <code><a href="http://smin" id="anchor1">class="blog"</a></code>: This link has <code><a href="http://smin" id="anchor1">class="blog"</a></code>:
<a href="http://diveintomark.org/" class="blog" hreflang="en" id="mark">diveintomark</a> <a href="http://diveintomark.org/" class="blog" hreflang="en" id="mark">diveintomark</a>
......
...@@ -88,8 +88,9 @@ test("id", function() { ...@@ -88,8 +88,9 @@ test("id", function() {
}); });
test("class", function() { test("class", function() {
expect(15); expect(16);
t( "Class Selector", ".blog", ["mark","simon"] ); t( "Class Selector", ".blog", ["mark","simon"] );
t( "Class Selector", ".GROUPS", ["groups"] );
t( "Class Selector", ".blog.link", ["simon"] ); t( "Class Selector", ".blog.link", ["simon"] );
t( "Class Selector w/ Element", "a.blog", ["mark","simon"] ); t( "Class Selector w/ Element", "a.blog", ["mark","simon"] );
t( "Parent Class Selector", "p .blog", ["mark","simon"] ); t( "Parent Class Selector", "p .blog", ["mark","simon"] );
...@@ -100,7 +101,7 @@ test("class", function() { ...@@ -100,7 +101,7 @@ test("class", function() {
t( "Class selector using UTF8", ".台北Táiběi, .台北", ["utf8class1","utf8class2"] ); t( "Class selector using UTF8", ".台北Táiběi, .台北", ["utf8class1","utf8class2"] );
t( "Descendant class selector using UTF8", "div .台北Táiběi", ["utf8class1"] ); t( "Descendant class selector using UTF8", "div .台北Táiběi", ["utf8class1"] );
t( "Child class selector using UTF8", "form > .台北Táiběi", ["utf8class1"] ); t( "Child class selector using UTF8", "form > .台北Táiběi", ["utf8class1"] );
t( "Escaped Class", ".foo\\:bar", ["foo:bar"] ); t( "Escaped Class", ".foo\\:bar", ["foo:bar"] );
t( "Escaped Class", ".test\\.foo\\[5\\]bar", ["test.foo[5]bar"] ); t( "Escaped Class", ".test\\.foo\\[5\\]bar", ["test.foo[5]bar"] );
t( "Descendant scaped Class", "div .foo\\:bar", ["foo:bar"] ); t( "Descendant scaped Class", "div .foo\\:bar", ["foo:bar"] );
...@@ -128,16 +129,10 @@ test("name", function() { ...@@ -128,16 +129,10 @@ test("name", function() {
test("multiple", function() { test("multiple", function() {
expect(4); expect(4);
var results = ["mark","simon","firstp","ap","sndp","en","sap","first"]; t( "Comma Support", "h2, p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
t( "Comma Support", "h2 , p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
if ( document.querySelectorAll ) { t( "Comma Support", "h2 , p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
results = ["firstp","ap","mark","sndp","en","sap","simon","first"]; t( "Comma Support", "h2,p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
}
t( "Comma Support", "a.blog, p", results);
t( "Comma Support", "a.blog , p", results);
t( "Comma Support", "a.blog ,p", results);
t( "Comma Support", "a.blog,p", results);
}); });
test("child and adjacent", function() { test("child and adjacent", function() {
...@@ -224,12 +219,6 @@ test("attributes", function() { ...@@ -224,12 +219,6 @@ test("attributes", function() {
t( "for Attribute", "form label[for]", ["label-for"] ); t( "for Attribute", "form label[for]", ["label-for"] );
t( "for Attribute in form", "#form [for=action]", ["label-for"] ); t( "for Attribute in form", "#form [for=action]", ["label-for"] );
var results = ["hidden1","radio1","radio2"];
if ( document.querySelectorAll ) {
results = ["radio1", "radio2", "hidden1"];
}
t( "Attribute containing []", "input[name^='foo[']", ["hidden2"] ); t( "Attribute containing []", "input[name^='foo[']", ["hidden2"] );
t( "Attribute containing []", "input[name^='foo[bar]']", ["hidden2"] ); t( "Attribute containing []", "input[name^='foo[bar]']", ["hidden2"] );
t( "Attribute containing []", "input[name*='[bar]']", ["hidden2"] ); t( "Attribute containing []", "input[name*='[bar]']", ["hidden2"] );
...@@ -238,9 +227,9 @@ test("attributes", function() { ...@@ -238,9 +227,9 @@ test("attributes", function() {
t( "Attribute containing []", "input[name$='foo[bar]']", ["hidden2"] ); t( "Attribute containing []", "input[name$='foo[bar]']", ["hidden2"] );
t( "Attribute containing []", "input[name*='foo[bar]']", ["hidden2"] ); t( "Attribute containing []", "input[name*='foo[bar]']", ["hidden2"] );
t( "Multiple Attribute Equals", "#form input[type='hidden'],#form input[type='radio']", results ); t( "Multiple Attribute Equals", "#form input[type='radio'], #form input[type='hidden']", ["radio1", "radio2", "hidden1"] );
t( "Multiple Attribute Equals", "#form input[type=\"hidden\"],#form input[type='radio']", results ); t( "Multiple Attribute Equals", "#form input[type='radio'], #form input[type=\"hidden\"]", ["radio1", "radio2", "hidden1"] );
t( "Multiple Attribute Equals", "#form input[type=hidden],#form input[type=radio]", results ); t( "Multiple Attribute Equals", "#form input[type='radio'], #form input[type=hidden]", ["radio1", "radio2", "hidden1"] );
t( "Attribute selector using UTF8", "span[lang=中文]", ["台北"] ); t( "Attribute selector using UTF8", "span[lang=中文]", ["台北"] );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment