Ajax 板


LINE

基本上我目前觉得应该是个蛮无用的 jQuery 内部函式(笑 不过 jQuery tw google group 有人问所以翻了一下, 顺手一起把回应内容也贴过来罗。 ----------------------------------------------------- 先看看官方的 example http://api.jquery.com/jQuery.unique/ 官方的 exmaple 说明的蛮清楚的,重新解释如下 ------------这是官方 example 的 html 部份 <div>There are 6 divs in this document.</div> <div></div> <div class="dup"></div> <div class="dup"></div> <div class="dup"></div> <div></div> ------------ 首先分析一下,整个sample 共6个div , 其中 ".dup" selector 可以拿到三个。 ------------ ------------这是官方 code var divs = $("div").get(); // unique() must take a native array // TonyQ: 这里 get 是把 jQuerycontext // 转成「真正的」 array 而已,本质上就是dom array。 // add 3 elements of class dup too (they are divs) divs = divs.concat($(".dup").get()); // 用阵列加法,把 ".dup"拿到的三个「真正的 dom array」加到这阵列, // 总共阵列中物件是九个,但是就真正的dom物件而言, // 这里只有六个是不重复的。 $("div:eq(1)").text("Pre-unique there are " + divs.length + "elements."); //印出来验证一下 数量 的确是九个 divs = jQuery.unique(divs); //去重复元素。 $("div:eq(2)") .text("Post-unique there are " + divs.length + "elements.") .css("color", "red"); //印出来确认一下,应该只留下六个 dom 。 -----------------------底下有几点要注意的 根据官方说明: This function only works on plain JavaScript arrays of DOM elements, and is chiefly used internally by jQuery. 也就是说这个只能比对 dom 物件,拿他来比其他东西是不会work的; 另外它会重新照在 document 中出现的顺序中排序,虽然这 feature 不一定用得到。 :p (As of jQuery 1.4 the results will always be returned in document order.) 至於他的实做是直接采用 Sizzle engine 的 uniqueSort ,这实作内容也非常简单。 :) Sizzle.uniqueSort = function(results){ if ( sortOrder ) { // sortOrder 有作 browser fix ,是一个排序用的函式(comparator) // 後面还有说明 hasDuplicate = baseHasDuplicate; //这里有作一些browser fix,baseHasDuplicate 看成 false就好。 // sortOrder 的意义就是去找出他在 document 中的 index 来做比较 //并会以此判断它有没有 duplicate, //如果有找到,在这个sort的过程中会把 hasDuplicate 设成 true 。 // 所以如果有一个dom 是被clone过的,又刚好都出现在这阵列中, // 在这里「不会」被当成 duplicate 滤掉。 // 例子看这 http://jsfiddle.net/tG9jN/ // 也因为这样,所以它只能 support dom array 的运算,c // 不能用来做一般阵列的运算。 // 相关实做可以看 1.4.2 uncompressed 原码 3364 行以後的部份 , // 有提到用 sourceIndex 等浏览器资料来运算的实做。 results.sort(sortOrder); if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { if ( results[i] === results[i-1] ) { results.splice(i--, 1); } } } } return results; }; -- 我:一半的日子让你说,我听你说你的所有______________________________________ ______________________________________一半的日子我想说,对你说过去的所有:我 _______________________________________________________ 在讨论中妥善扮演兼具聆听与分享的角色,是我们一生的课题。 _______________________________________________________ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.137.2.106
1F:推 megaman1206:如果unique可以用在一般阵列就好了 09/08 23:43
2F:→ TonyQ:只要做 comparator ,基本上完全可以自己实做吧 XD 09/08 23:45
3F:→ TonyQ:这篇给的逻辑也是 sort 然後照着跑loop而已啊 :3 09/08 23:46
4F:→ TonyQ:差异只有 comparator,不过 unique 有这麽常用吗 @_@ 09/08 23:46
5F:推 othree:http://phpjs.org/functions/array_unique:346 09/10 13:28







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP