📄 core.js
字号:
module("core");
test("Basic requirements", function() {
expect(7);
ok( Array.prototype.push, "Array.push()" );
ok( Function.prototype.apply, "Function.apply()" );
ok( document.getElementById, "getElementById" );
ok( document.getElementsByTagName, "getElementsByTagName" );
ok( RegExp, "RegExp" );
ok( jQuery, "jQuery" );
ok( $, "$()" );
});
test("$()", function() {
expect(8);
var main = $("#main");
isSet( $("div p", main).get(), q("sndp", "en", "sap"), "Basic selector with jQuery object as context" );
/*
// disabled since this test was doing nothing. i tried to fix it but i'm not sure
// what the expected behavior should even be. FF returns "\n" for the text node
// make sure this is handled
var crlfContainer = $('<p>\r\n</p>');
var x = crlfContainer.contents().get(0).nodeValue;
equals( x, what???, "Check for \\r and \\n in jQuery()" );
*/
/* // Disabled until we add this functionality in
var pass = true;
try {
$("<div>Testing</div>").appendTo(document.getElementById("iframe").contentDocument.body);
} catch(e){
pass = false;
}
ok( pass, "$('<tag>') needs optional document parameter to ease cross-frame DOM wrangling, see #968" );*/
var code = $("<code/>");
equals( code.length, 1, "Correct number of elements generated for code" );
var img = $("<img/>");
equals( img.length, 1, "Correct number of elements generated for img" );
var div = $("<div/><hr/><code/><b/>");
equals( div.length, 4, "Correct number of elements generated for div hr code b" );
// can actually yield more than one, when iframes are included, the window is an array as well
equals( $(window).length, 1, "Correct number of elements generated for window" );
equals( $(document).length, 1, "Correct number of elements generated for document" );
equals( $([1,2,3]).get(1), 2, "Test passing an array to the factory" );
equals( $(document.body).get(0), $('body').get(0), "Test passing an html node to the factory" );
});
test("browser", function() {
expect(13);
var browsers = {
//Internet Explorer
"Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)": "6.0",
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)": "7.0",
/** Failing #1876
* "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30)": "7.0",
*/
//Browsers with Gecko engine
//Mozilla
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915" : "1.7.12",
//Firefox
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3": "1.8.1.3",
//Netscape
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20070321 Netscape/8.1.3" : "1.7.5",
//Flock
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.11) Gecko/20070321 Firefox/1.5.0.11 Flock/0.7.12" : "1.8.0.11",
//Opera browser
"Opera/9.20 (X11; Linux x86_64; U; en)": "9.20",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.20" : "9.20",
"Mozilla/5.0 (Windows NT 5.1; U; pl; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.20": "9.20",
//WebKit engine
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; sv-se) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3": "418.9",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3" : "418.8",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; sv-se) AppleWebKit/312.8 (KHTML, like Gecko) Safari/312.5": "312.8",
//Other user agent string
"Other browser's user agent 1.0":null
};
for (var i in browsers) {
var v = i.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ); // RegEx from Core jQuery.browser.version check
version = v ? v[1] : null;
equals( version, browsers[i], "Checking UA string" );
}
});
test("noConflict", function() {
expect(6);
var old = jQuery;
var newjQuery = jQuery.noConflict();
equals( newjQuery, old, "noConflict returned the jQuery object" );
equals( jQuery, old, "Make sure jQuery wasn't touched." );
equals( $, "$", "Make sure $ was reverted." );
jQuery = $ = old;
newjQuery = jQuery.noConflict(true);
equals( newjQuery, old, "noConflict returned the jQuery object" );
equals( jQuery, "jQuery", "Make sure jQuery was reverted." );
equals( $, "$", "Make sure $ was reverted." );
jQuery = $ = old;
});
test("isFunction", function() {
expect(21);
// Make sure that false values return false
ok( !jQuery.isFunction(), "No Value" );
ok( !jQuery.isFunction( null ), "null Value" );
ok( !jQuery.isFunction( undefined ), "undefined Value" );
ok( !jQuery.isFunction( "" ), "Empty String Value" );
ok( !jQuery.isFunction( 0 ), "0 Value" );
// Check built-ins
// Safari uses "(Internal Function)"
ok( jQuery.isFunction(String), "String Function("+String+")" );
ok( jQuery.isFunction(Array), "Array Function("+Array+")" );
ok( jQuery.isFunction(Object), "Object Function("+Object+")" );
ok( jQuery.isFunction(Function), "Function Function("+Function+")" );
// When stringified, this could be misinterpreted
var mystr = "function";
ok( !jQuery.isFunction(mystr), "Function String" );
// When stringified, this could be misinterpreted
var myarr = [ "function" ];
ok( !jQuery.isFunction(myarr), "Function Array" );
// When stringified, this could be misinterpreted
var myfunction = { "function": "test" };
ok( !jQuery.isFunction(myfunction), "Function Object" );
// Make sure normal functions still work
var fn = function(){};
ok( jQuery.isFunction(fn), "Normal Function" );
var obj = document.createElement("object");
// Firefox says this is a function
ok( !jQuery.isFunction(obj), "Object Element" );
// IE says this is an object
ok( jQuery.isFunction(obj.getAttribute), "getAttribute Function" );
var nodes = document.body.childNodes;
// Safari says this is a function
ok( !jQuery.isFunction(nodes), "childNodes Property" );
var first = document.body.firstChild;
// Normal elements are reported ok everywhere
ok( !jQuery.isFunction(first), "A normal DOM Element" );
var input = document.createElement("input");
input.type = "text";
document.body.appendChild( input );
// IE says this is an object
ok( jQuery.isFunction(input.focus), "A default function property" );
document.body.removeChild( input );
var a = document.createElement("a");
a.href = "some-function";
document.body.appendChild( a );
// This serializes with the word 'function' in it
ok( !jQuery.isFunction(a), "Anchor Element" );
document.body.removeChild( a );
// Recursive function calls have lengths and array-like properties
function callme(callback){
function fn(response){
callback(response);
}
ok( jQuery.isFunction(fn), "Recursive Function Call" );
fn({ some: "data" });
};
callme(function(){
callme(function(){});
});
});
var foo = false;
test("$('html')", function() {
expect(6);
reset();
foo = false;
var s = $("<script>var foo='test';</script>")[0];
ok( s, "Creating a script" );
ok( !foo, "Make sure the script wasn't executed prematurely" );
$("body").append(s);
ok( foo, "Executing a scripts contents in the right context" );
reset();
ok( $("<link rel='stylesheet'/>")[0], "Creating a link" );
reset();
var j = $("<span>hi</span> there <!-- mon ami -->");
ok( j.length >= 2, "Check node,textnode,comment creation (some browsers delete comments)" );
ok( !$("<option>test</option>")[0].selected, "Make sure that options are auto-selected #2050" );
});
test("$('html', context)", function() {
expect(1);
var $div = $("<div/>");
var $span = $("<span/>", $div);
equals($span.length, 1, "Verify a span created with a div context works, #1763");
});
if ( !isLocal ) {
test("$(selector, xml).text(str) - Loaded via XML document", function() {
expect(2);
stop();
$.get('data/dashboard.xml', function(xml) {
// tests for #1419 where IE was a problem
equals( $("tab:first", xml).text(), "blabla", "Verify initial text correct" );
$("tab:first", xml).text("newtext");
equals( $("tab:first", xml).text(), "newtext", "Verify new text correct" );
start();
});
});
}
test("length", function() {
expect(1);
equals( $("p").length, 6, "Get Number of Elements Found" );
});
test("size()", function() {
expect(1);
equals( $("p").size(), 6, "Get Number of Elements Found" );
});
test("get()", function() {
expect(1);
isSet( $("p").get(), q("firstp","ap","sndp","en","sap","first"), "Get All Elements" );
});
test("get(Number)", function() {
expect(1);
equals( $("p").get(0), document.getElementById("firstp"), "Get A Single Element" );
});
test("add(String|Element|Array|undefined)", function() {
expect(12);
isSet( $("#sndp").add("#en").add("#sap").get(), q("sndp", "en", "sap"), "Check elements from document" );
isSet( $("#sndp").add( $("#en")[0] ).add( $("#sap") ).get(), q("sndp", "en", "sap"), "Check elements from document" );
ok( $([]).add($("#form")[0].elements).length >= 13, "Check elements from array" );
// For the time being, we're discontinuing support for $(form.elements) since it's ambiguous in IE
// use $([]).add(form.elements) instead.
//equals( $([]).add($("#form")[0].elements).length, $($("#form")[0].elements).length, "Array in constructor must equals array in add()" );
var x = $([]).add($("<p id='x1'>xxx</p>")).add($("<p id='x2'>xxx</p>"));
equals( x[0].id, "x1", "Check on-the-fly element1" );
equals( x[1].id, "x2", "Check on-the-fly element2" );
var x = $([]).add("<p id='x1'>xxx</p>").add("<p id='x2'>xxx</p>");
equals( x[0].id, "x1", "Check on-the-fly element1" );
equals( x[1].id, "x2", "Check on-the-fly element2" );
var notDefined;
equals( $([]).add(notDefined).length, 0, "Check that undefined adds nothing" );
// Added after #2811
equals( $([]).add([window,document,document.body,document]).length, 3, "Pass an array" );
equals( $(document).add(document).length, 1, "Check duplicated elements" );
equals( $(window).add(window).length, 1, "Check duplicated elements using the window" );
ok( $([]).add( document.getElementById('form') ).length >= 13, "Add a form (adds the elements)" );
});
test("each(Function)", function() {
expect(1);
var div = $("div");
div.each(function(){this.foo = 'zoo';});
var pass = true;
for ( var i = 0; i < div.size(); i++ ) {
if ( div.get(i).foo != "zoo" ) pass = false;
}
ok( pass, "Execute a function, Relative" );
});
test("index(Object)", function() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -