博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery中的unique()
阅读量:4361 次
发布时间:2019-06-07

本文共 1763 字,大约阅读时间需要 5 分钟。

jQuery中 的 unique() 函数实现了对 DOM ELement按出现位置进行排序并去除重复元素的功能。使用方法如下:

<html>

<head></head>
<body οnlοad="test()">
<div id="div_1">
    <div id="div_2" />
</div>
<div id="div_3" />
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
function test() {
    var divs = [
        document.getElementById('div_3'),
        document.getElementById('div_1'),
        document.getElementById('div_2'),
        document.getElementById('div_2'),
        document.getElementById('div_1')
    ];
    var html = show('before uinque', divs);
    $.unique(divs);
    html += show('after uinque', divs);
    document.write(html);
}
function show(name, divs) {
    var html = '';
    for (var i = 0; i < divs.length; ++i) {           
        html += divs[i].getAttribute('id') + '<br />';
    }
    return name + ':<br />' + html + '<br />';
}
</script>
</body>
</html>

从函数名来看,应该主要是用于去除重复元素的,为什么同时又先对 DOM Element 进行排序?为了解释这个问题,先让我们试一下不事先进行排序的情况下需要如何去除重复。

不排序的去除重复元素的实现
$ = function() {
    return {
        unique: function(elems) {
            for (var i = 0; i < elems.length; ++i) {
                for (var j = i + 1; j < elems.length; ++j) {
                    if (elems[i] === elems[j]) {
                        elems.splice(i--, 1);
                        break;
                    }
                }
            }
            return elems;
        },
        unique2: function(elemsWithId) {
            var obj = {};
            for (var i = 0; i < elemsWithId.length; ++i) {
                var elem = elemsWithId[i];
                obj[elem.getAttribute('id')] = elem;
            }
            elemsWithId.length = 0;
            for (var id in obj) {
                elemsWithId.push(obj[id])
            }
           
            return elemsWithId;
        }
    }
}();
实现一使用了两重循环,算法复杂度为O(n^2);实现思路比较直观,即遍历数组,看每个元素是否与后面的元素重复,有重复则移除;但当DOM Element数量较多时性能较差,而jQuery中对大量元素进行去除重复的操作时很普遍的。
  实现二将 Object 当做 HashMap/HashSet 来使用,算法复杂度为O(n);遗憾的是JavaScript中无法直接用 DOM ELement 作为 Object 的 key ,因此只能将 id 作为 key ,然而并非所有的 DOM Element 都是有 id 的,所以这种方法并不通用。而自己实现一个高性能的 HashSet(还需要自己动手计算 DOM Element 的 Hash Code ),工作量有比较大。

转载于:https://www.cnblogs.com/ctou45/archive/2011/05/10/2041853.html

你可能感兴趣的文章
LeetCode题解之Univalued Binary Tree
查看>>
线程池学习研究-(自实现)2
查看>>
ubuntu下安装新字体
查看>>
Django连接MySQL数据库
查看>>
漫游Kafka入门篇之简单介绍(1)
查看>>
redis学习之旅-初识Redis
查看>>
WinForm 小程序 NotePad
查看>>
JSTL 核心标签库 使用
查看>>
线程池ThreadPool
查看>>
hibernate入门实例
查看>>
WPF路由事件二:路由事件的三种策略(转)
查看>>
Java中的内存泄露
查看>>
asp.net 自定义控件验证FCKeditor是否为空
查看>>
oracle 查看表空间的脚本
查看>>
Python 描述符是什么?以及如何实现
查看>>
程序员的激情其实是一种痛苦
查看>>
MySQL后台线程的清理工作
查看>>
连接mysql数据库,创建用户模型
查看>>
cogs1885 [WC2006]水管局长数据加强版
查看>>
paramiko模块
查看>>