返回值:jQueryjQuery(selector, [context])

接受字符串形式的 CSS 选择器,用于匹配一组元素。

上述函数中的 jQuery() — 也可以写作 $() — 将会遍历 DOM,选择出满足指定选择器的元素,并生成一个新的 jQuery 对象,指向那些元素:

$('div.foo');

如果没有找到与指定选择器相匹配的元素,那么新生成的 jQuery 对象会是 "empty",也就是说,不包含任何元素,并且其 .length 的属性值是 0。

选择器上下文

默认情况下,选择器会从文档的根部,在 DOM 中查找匹配的元素。然而,你可以向 $() 函数中传入一个可选的参数(也就是传入第二个参数),来指定一个用于限定查找范围的上下文。例如,可以像下面这样,在一个事件处理的范围内限定查找范围:

$('div.foo').click(function() {
  $('span', this).addClass('bar');
});

用于查找 span 的选择器上下文被限定成 this,只有被点击元素内的 span,才会被附加上指定的样式。

在 jQuery 内部,选择器上下文是通过 .find() 方法实现的,因此 $('span', this) 等价于 $(this).find('span')

使用 DOM 元素

在 jQuery(element) 和 jQuery(object) 函数中,也可以使用通过其它方式选择的 DOM 元素来生成新的 jQuery 对象。通常在如下情况使用此种方式:调用 jQuery 方法的元素,通过关键字 this 将选择的元素传给回调函数:

$('div.foo').click(function() {
  $(this).slideUp();
});

在上面例子中,点击匹配的元素时,会在元素上应用向上滑动的动画而最终导致元素被隐藏。因为事件处理通过 this 关键字,接收到了被点击的元素,但是该元素是原生的 DOM 元素,所以需要通过 $() 函数,将它转换成 jQuery 对象,然后就可以在该 jQuery 对象上调用 jQuery 方法了。

通过 Ajax 调用而返回的 XML 数据,也可以传给 $() 函数。因此可以通过 .find() 或其它 DOM 遍历方法来返回所需要的节点的 XML 结构。

$.post('url.xml', function(data) {
  var $child = $(data).find('child');
})

克隆 jQuery 对象

若将一个 jQuery 对象传给 $() 函数,会生成一个该 jQuery 对象的克隆对象。新的 jQuery 对象和参数中的 jQuery 对象所指向的 DOM 元素是一样的。

返回一个空集合

从 jQuery 1.4 开始,如果调用不带参数jQuery() 方法,会返回一个空的 jQuery 集合(.length 属性值是 0)。在 jQuery 之前的版本中,则会返回一个含有文档节点的集合。

与纯对象一起使用

目前为止,支持将纯对象用 jQuery 包裹的方法包括:.data(),.prop(),.bind(), .unbind(), .trigger().triggerHandler()。在 .data() (或任何需要 .data() 的方法)上使用纯对象时,会导致在元素上生成一个新的属性,叫做 jQuery{随机数} (eg. jQuery123456789)。

// define a plain object
var foo = {foo:'bar', hello:'world'};

// wrap this with jQuery
var $foo = $(foo);

// test accessing property values
var test1 = $foo.prop('foo'); // bar

// test setting property values
$foo.prop('foo', 'foobar');
var test2 = $foo.prop('foo'); // foobar

// test using .data() as summarized above
$foo.data('keyName', 'someValue');
console.log($foo); // will now contain a jQuery{randomNumber} property

// test binding an event name and triggering
$foo.bind('eventName', function (){
        console.log('eventName was called');
});

$foo.trigger('eventName'); // logs 'eventName was called'

这里需要注意上面例子中的 .trigger('eventName'),该语句会在元素上查找 'eventName' 属性,并且当添加到元素的其它任何 jQuery 事件处理执行完后,就会执行 'eventName'。但它并不检查 'eventName' 到底是不是一个函数。为了避免这种情况的发生,也就是检查 'eventName' 到底是不是一个函数,请使用 .triggerHandler('eventName') 来代替。

$foo.triggerHandler('eventName'); // also logs 'eventName was called'

示例:

查找所有 div 下的 p 元素,并为它们加上边框。

<!DOCTYPE html>
<html>
<head>
<script src="jquery.min.js"></script>
</head>
<body>

<p>one</p> <div><p>two</p></div> <p>three</p>

<script>


  $("div > p").css("border", "1px solid gray");


</script>
</body>
</html>

演示:

示例:

查找文档中第一个表单中的所有单选按钮。

jQuery 代码:
$("input:radio", document.forms[0]);

示例:

查找 Ajax 返回的 XML 文档中的所有 div 元素。

jQuery 代码:
$("div", xml.responseXML);

示例:

将页面的背景色设置成黑色。

jQuery 代码:
$(document.body).css( "background", "black" );

示例:

隐藏 myForm 表单中的所有 input 元素。

jQuery 代码:
$(myForm.elements).hide()

返回值:jQueryjQuery(html, [ownerDocument])

根据提供的原始 HTML 字符串,动态创建 DOM 元素。

创建新的元素

如果将一个字符串参数传给 $(),那么 jQuery 会检查这个字符串,判断它是否是 HTML。(例如,检查字符串中是否含有 <tag ... >)。如果不是 HTML,则该字符串会被当成是一个选择器表达式。但是如果该字符串是一个 HTML 代码片断,那么,jQuery 就会根据它尝试创建一个新的 DOM 元素。之后,该方法会返回一个 jQuery 对象,并指向这些元素。此时,你就可以使用像以前那样,在该对象上使用各种 jQuery 方法:

$('<p id="test">My <em>new</em> text</p>').appendTo('body');

如果提供的 HTML 比较复杂(不是一个简单的 HTML,只有一个单一标签而且没有属性),就像上面的例子那样,那么实际上,创建元素的处理是利用了浏览器的 innerHTML 机制。在大多数情况下,jQuery 会创建一个新的 <div> 元素,并将该元素的 innerHTML 属性设置成传入的 HTML 代码片断。如果传入的参数只是一个单一的标签,例如:$('<img />')$('<a></a>'),那么 jQuery 会使用 JavaScript 原生的 createElement() 函数来创建元素。

如果传递的 HTML 更加复杂,那么有些浏览器可能无法准确的根据所提供的 HTML 源代码,生成 DOM。正向前文所说的那样,jQuery 使用浏览器的 .innerHTML 属性来解析传入的 HTML 参数,并且将它插入到当前文档中。在这个过程中,有些浏览器会过滤掉一些元素,例如,<html>, <title>, 或 <head> 元素。这就导致最终被插入的内容,可能并不是传入的原始字符串内容。

过滤操作并不是指只过滤上述提到的标签。例如, Internet Explorer 8 之前的版本,还会将所有链接的 href 属性转化成绝对路径。并且在 Internet Explorer 9 之前的版本,还无法正确的处理 HTML5 元素,除非添加了如下内容 兼容层

为了保证跨浏览器的兼容性,所提供的代码片断必须是格式正确的。如果标签中含有其它元素,那么该标签就应该有结束标签:

$('<a href="http://jquery.com"></a>');

也可以像下面这样写,因为 jQuery 支持类似 XML 的标签语法(可以有,也可以没有斜杠):

$('<a/>');

对于不含有元素的标签,可以使用快速封闭(quick-closed),当然也可以不这样做:

$('<img />');
$('<input>');

当向 jQuery() 中传入 HTML 时,还需要注意的是,文本节点并不必当作 DOM 元素来看待。除了某些方法外(例如,.content()),文本节点通常会被忽略或被移除。例如:

var el = $('1<br/>2<br/>3'); // returns [<br>, "2", <br>] 
el  = $('1<br/>2<br/>3 >'); // returns [<br>, "2", <br>, "3 &gt;"]

这是预期的行为。

从 jQuery 1.4 开始,jQuery() 的第二个参数是一个映射,该映射是由可传递给 .attr() 方法的属性超集组成的。此外,映射里还可以包括任何 事件类型,还可以调用如下 jQuery 方法: val, css, html, text, data, width, height, 和 offset。若映射的键是 "class",那么必须使用引号包裹,因为它是 JavaScript 保留字。并且不能使用 "className",因为它不是正确的属性名。

注意: Internet Explorer 不允许你创建 inputbutton 元素或修改它们的类型。你必须指明类型,例如 '<input type="checkbox" />'。请看下面的示例:

IE 不支持以下形式的创建:

$('<input />', {
    type: 'text',
    name: 'test'
}).appendTo("body");

需要像下面这样书写:

$('<input type="text" />').attr({
    name: 'test'
}).appendTo("body");

示例:

动态创建一个 div 元素(以及它的内容),并将它追加到 body 元素后。在 jQuery 内部是通过所指定元素的 innerHTML 属性对新生成的元素进行赋值的。

jQuery 代码:
$("<div><p>Hello</p></div>").appendTo("body")

示例:

创建一些 DOM 元素。

jQuery 代码:
$("<div/>", {
  "class": "test",
  text: "Click me!",
  click: function(){
    $(this).toggleClass("test");
  }
}).appendTo("body");

返回值:jQueryjQuery(callback)

绑定当 DOM 加载完成时执行的函数。

该函数的行为就像 $(document).ready(),通常用 $(document).ready() 包裹页面上依赖 DOM 加载完成时执行的其它的 $() 操作。虽然这个函数从技术上来讲是可以进行链式操作的,但真的很少这么用。

示例:

当 DOM 加载完成时执行函数。

jQuery 代码:
$(function(){
   // Document is ready
 });

示例:

为了更加安全的使用 jQuery 的 $ 别名,而不依赖全局的 $ 别名,我们可以同时使用 $(document).ready() 的快捷方式和参数来达到此目的。

jQuery 代码:
jQuery(function($) {
    // Your code using failsafe $ alias here...
  });