有没有会写 jQuery 自定义选择器的同学,有一个小问题要请教一下!

kvzxobhm 2011-04-03 07:09:59
http://tianyazjq110.iteye.com/blog/578759



问题一:上面那个页面中第14行里的 m[3] 是什么意思?中括号代表什么?中括号中为什么要是3?



http://www.oschina.net/code/snippet_54100_2959


问题二:上面那个页面中第01行中的 stack 是什么意思?
...全文
145 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kvzxobhm 2011-04-04
  • 打赏
  • 举报
回复
嗯,你这样输出之后,是知道了m[3]的值,但还是不知道中括号代表什么?中括号中为什么要是3呀?
kvzxobhm 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hnxxwyq 的回复:]
引用 5 楼 kvzxobhm 的回复:

引用 4 楼 hnxxwyq 的回复:
$("div:between(2,5)")

m的值是:

[
':between(2,5)', // 0
'between', // 1
'', // 2
'2,5' // 3
]

m作为一个数组当然可以用中括号了!

……
[/Quote]

差不多明白了!非常感谢你的指导!谢谢!
lazyboy_wu 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kvzxobhm 的回复:]

引用 4 楼 hnxxwyq 的回复:
$("div:between(2,5)")

m的值是:

[
':between(2,5)', // 0
'between', // 1
'', // 2
'2,5' // 3
]

m作为一个数组当然可以用中括号了!

stack 是作为选择器使用以后获取的所有元素……
[/Quote]

无论你是否明确声明参数的个数是否4个,jquery都会传递这4个参数!
你可以认为,当你使用$.expr[":"]扩展选择器时,就会传递4个参数:当前元素本身,当前索引值,选择器匹配符参数,和所有要筛选的元素集合!

其实这个相当于

$es = $('div');
$es.each(function(i,n){
// 无论你between怎么实现,jquery就是这样调用between的
between(n, i, ['', ''], $es);
});

lazyboy_wu 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huangwenquan123 的回复:]

引用 4 楼 hnxxwyq 的回复:
$("div:between(2,5)")

m的值是:

[
':between(2,5)', // 0
'between', // 1
'', // 2
'2,5' // 3
]

m作为一个数组当然可以用中括号了!

stack 是作为选择器使用以后获取的所有元素集合!上例就是所有的div元素!
为什么m的值是那一个数组……
[/Quote]

当你使用$.expr[":"]这个扩展选择器时,jquery就会可以给你传递这个4个参数,无论你是否会使用,他都会传这个4个参数!
kaifadi 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kvzxobhm 的回复:]

引用 4 楼 hnxxwyq 的回复:
$("div:between(2,5)")

m的值是:

[
':between(2,5)', // 0
'between', // 1
'', // 2
'2,5' // 3
]

m作为一个数组当然可以用中括号了!

stack 是作为选择器使用以后获取的所有元素……
[/Quote]
$("#cc").html(m[3]);
代码里我用程序显示了m[3],难道你就不知道举一反三,变通一下,直接把m[0],m[1],甚至整个m显示出来吗?晕死!即使你不知道复杂的应用,最起码应该知道JS里数组是长什么样的吧!自己多动手,其实很多问题都能够自己解决的,而且还能学得更深入!
huangwenquan123 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hnxxwyq 的回复:]
$("div:between(2,5)")

m的值是:

[
':between(2,5)', // 0
'between', // 1
'', // 2
'2,5' // 3
]

m作为一个数组当然可以用中括号了!

stack 是作为选择器使用以后获取的所有元素集合!上例就是所有的div元素!
[/Quote]为什么m的值是那一个数组呢?
kvzxobhm 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hnxxwyq 的回复:]
$("div:between(2,5)")

m的值是:

[
':between(2,5)', // 0
'between', // 1
'', // 2
'2,5' // 3
]

m作为一个数组当然可以用中括号了!

stack 是作为选择器使用以后获取的所有元素集合!上例就是所有的div元素!
[/Quote]

这下终于豁然开朗了,谢谢仁兄!
不过还有一事不明,stack这个参数好像可以省略,省略就是使用其默认值,那可以肯定,它的默认值就是获取所有元素,那要是不省略呢,是不是还有其它设定,比如说是不是可以不猎取所有的元素
lazyboy_wu 2011-04-04
  • 打赏
  • 举报
回复

$("div:between(2,5)")

m的值是:

[
':between(2,5)', // 0
'between', // 1
'', // 2
'2,5' // 3
]

m作为一个数组当然可以用中括号了!

stack 是作为选择器使用以后获取的所有元素集合!上例就是所有的div元素!
kaifadi 2011-04-04
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>插件4,between</title>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<!-- 引入jQuery -->
<script src="jq.js" type="text/javascript">
</script>
<script type="text/javascript">
;
(function($){
$.extend($.expr[":"], {
between: function(a, i, m){
$("#cc").html(m[3]);
var tmp = m[3].split(",");
return tmp[0]-0<i && i<tmp[1]-0;
//tmp[0],eg为2,i>2的时候,并且i<5,另外一个边界,条件成立,根据索引值i,保留其所对应的Dom元素.
}
})
})(jQuery);

//插件应用
$(function(){
alert("执行前");
$("div:between(2,5)").css("background","white");
alert("执行后");
})
</script>
</head>
<body>
<div style="background:red">
0
</div>
<div style="background:blue">
1
</div>
<div style="background:green">
2
</div>
<div style="background:yellow">
3
</div>
<div style="background:gray">
4
</div>
<div style="background:orange">
5
</div>
<div id="cc"></div>
</body>
</html>

m[3]就是2,5,也就是div:between(2,5)

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧