在jQuery中,最常用的美元符号$,提供了丰富功能。

$包括选择页面中一个或一类元素、作为功能函数的前缀、windows.onload的完善,创建DOM节点等。

 

$就是jQuery的别称

jQuery就是jQuery库提供的一个函数,$是jQuery的别称

例如:$.ajax(options) 等同 jQuery.ajax(options))

$函数的作用是根据 () 里的参数进行查找和选择html文档中的元素, 函数作用之一就是GetElementByID的代替,但()内不仅可以是ID,还可以是各类选择器

比如:$(document)就是选取整个文档对象

那是不是只可以用$来代替,不是。

为了防止命名冲突,jQuery库提供了另外的机制来给jQuery函数起另外的别名。

例如:

var jq = jQuery.noConflict();

// Do something with jQuery
jq("div p").hide();

// Do something with another library's $()
$("div p").style.display = 'none';

在代码里,自定义用 jq 代替 jQuery 和 $ 

 

 

jQuery 选择器的通用语法

$(selector)  或者  jQuery(selector)

其中,selector符合css标准,甚至css3的标准,例如:

$("#showDiv")

id唯一标识选择器,这相当于javascript中,document.getElementById("shouDiv"),可以看到jQuery的变色方法简洁很多。

 

$(".newClass")

class类别选择器,选择css类别为"newClass"元素的节点,在javascript要实现相同的选择,需要用for循环遍历整个DOM

 

$("p:odd")

特定一组类的选择所有奇数行的p元素,几乎所有的标记都可以使用 ":odd"和":even"选择奇偶的选择。

 

$("td:nth-child(1)")

选择所有表格行的第一个单元格,就是第一列。这在修改表格的某一列是非常有用的,不再需要一行行的遍历表格。

 

$("li>a")

子选择器,返回<li>下标记的<a>元素,不包括孙元素标记

 

$("a[herf$=pdf]")

属性选择器,选择所有超链接,并且这些链接是以pdf结尾的。

 

$('div>ul')和$('div ul') 有区别

$('div>ul')是<div>的直接后代里找<ul>

$('div ul')是在<div>的所有后代里找<ul>

 

 

(function($){...})(jQuery) 含义

function(arg){...}

定义了一个匿名函数,参数为arg

而调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即:

function(arg){...} )(param)

这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数


function($){...} )(jQuery)

则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery

var fn = function($){....};
fn(jQuery); 

 

 

jQuery $命名冲突解决方案

米扑博客在做米扑打赏赞助功能时,遇到了一个js问题,即同时引用了jquery库和另外一个js库,当用$("#abc")去调用js库函数时,发现提示错误!

于是网上查找了很多资料,原来是jquery命名冲突了。

本文将总结米扑博客解决jQuery $命名冲突的解决方案。

因为许多JavaScript 库使用$作为函数或变量名,jquery也一样。

其实,$只是jquery的一个别名而已,假如需要使用jquery 之外的另一js库,可以通过调用 $.noConflict() 向该库返回控制权。

 

方案1:分别使用 jQuery 和 $

<!-- 引入 prototype  --> 
<script src="prototype-1.6.0.3.js" type="text/javascript"></script> 
<!-- 引入 jQuery  --> 
<script src="/scripts/jquery-1.3.1.js" type="text/javascript"></script> 

<p>test jQuery</p> 
<p id="pp">test prototype</p> 

<script type="text/javascript"> 
	jQuery.noConflict();                	// 将变量$的控制权让渡给prototype.js  
	jQuery(function(){                    	// 使用jQuery  
	    jQuery("p").click(function(){  
	        alert( jQuery(this).text() );  
	    });  
	});  
	$("pp").style.display = 'none';        	// 使用prototype  
</script> 

 

方案2:自定义 $jq

<!-- 引入 prototype  --> 
<script src="prototype-1.6.0.3.js" type="text/javascript"></script> 
<!-- 引入 jQuery  --> 
<script src="/scripts/jquery-1.3.1.js" type="text/javascript"></script> 

<p>test jQuery</p> 
<p id="pp">test prototype</p> 

<script type="text/javascript"> 
	var $jq = jQuery.noConflict();        	// 自定义一个比较短快捷方式  
	$jq(function(){                        	// 使用jQuery  
	    $jq("p").click(function(){  
	        alert( $jq(this).text() );  
	    });  
	});  
	$("pp").style.display = 'none';        	// 使用prototype  
</script> 

 

方案3:统一使用$

<!-- 引入 prototype  --> 
<script src="prototype-1.6.0.3.js" type="text/javascript"></script> 
<!-- 引入 jQuery  --> 
<script src="/scripts/jquery-1.3.1.js" type="text/javascript"></script> 

<p>test jQuery</p> 
<p id="pp">test prototype</p> 

<script type="text/javascript"> 
	jQuery.noConflict();                	// 将变量$的控制权让渡给prototype.js  
	jQuery(function($){                    	// 使用jQuery  
	    $("p").click(function(){        	// 继续使用 $ 方法  
	        alert( $(this).text() );  
	    });  
	});  
	$("pp").style.display = 'none';        	// 使用prototype  
</script> 

 

 

方案4:调用匿名函数

<!-- 引入 prototype  --> 
<script src="prototype-1.6.0.3.js" type="text/javascript"></script> 
<!-- 引入 jQuery  --> 
<script src="/scripts/jquery-1.3.1.js" type="text/javascript"></script> 

<p>test jQuery</p> 
<p id="pp">test prototype</p> 

<script type="text/javascript"> 
	jQuery.noConflict();                	// 将变量$的控制权让渡给prototype.js  
	(function($){                        	// 定义匿名函数并设置形参为$  
	    $(function(){                    	// 匿名函数内部的$均为jQuery  
	        $("p").click(function(){    	// 继续使用 $ 方法  
	            alert($(this).text());  
	        });  
	    });  
	})(jQuery);                            	// 执行匿名函数且传递实参jQuery  
	$("pp").style.display = 'none';        	// 使用prototype  
</script> 

 

方案5:先导入jQuery

<!--先导入jQuery --> 
<script src="/scripts/jquery-1.3.1.js" type="text/javascript"></script> 
<!--后导入其他库 --> 
<script src="prototype-1.6.0.3.js" type="text/javascript"></script> 
 
<p>test jQuery</p> 
<p id="pp">test prototype</p>

<script type="text/javascript"> 
	jQuery(function(){   					// 直接使用jQuery, 没有必要调用"jQuery.noConflict()"函数。  
	    jQuery("p").click(function(){        
	        alert( jQuery(this).text() );  
	    });  
	});  
	$("pp").style.display = 'none'; 		// 使用prototype  
</script> 

 

 

参考推荐

jQuery的$命名冲突

jQuery 中 ajax 后台数据交互总结

JavaScript 各种遍历方式详解

js 处理json和字符串示例

js 数组Array用法