模拟jquery封装简单的Select搜索

var Select=(function () {    //自定义 select 方法的思路:    //1> 定义一个 support 对象. 将需要使用的方法进行处理, 得到方法的能力    //2> 需要使用的可能有兼容性的方法, 定义一个可以完成该方法的函数来替代. 在函数内部进行兼容处理    //3> 定义 select 函数. 首先看是否支持 qsa, 如果支持直接使用. 如果不支持自己再来实现

    //native code判断是否是内置方法    var rnative=/\[native code\]/    var support={}    //是否支持querySelectorAll    support.qsa=rnative.test(document.querySelectorAll) ;    //是否支持    support.getElementsByClassName=rnative.test(document.getElementsByClassName)    //因为document和node的继承关系不一样,所以要做二次判断    var div=document.createElement(‘div‘)    support.getElementsByClassName2=rnative.test(div.getElementsByClassName)    support.indexOf=rnative.test(Array.prototype.indexOf);    support.trim=rnative.test(String.prototype.trim)    // 在开始将需要的方法定义好    var push=[].push;    //解决push的展开伪数组问题兼容性问题,    //因为无法检测浏览器是否有push,所以只能先尝试判断    //先尝试是否可行,不行的话就使用自定义方式    try{        push.apply([],document.getElementsByTagName(‘*‘));    }catch(e){        push={            apply: function (a,b) {                for(var i=0;i< b.length;i++){                    a[a.length++]=b[i];                }                return a.length;            },            call: function (a) {                for(var i=1;i<arguments.length;i++){                    a[a.length++]=arguments[i];                }

                //var args=[].slice.call(arguments,1)                //this.push.apply(a,args)            }        }    }

    //解决indexOf浏览器的兼容的问题    function indexOf(array,search,starindex){        starindex=starindex||0;        if(support.indexOf){            return array.indexOf(search,starindex)        }else{            for(var i=starindex;i<array.length;i++){               if(array[i]==search){                   return i;               }            }            return -1;        }    }

    //解决byclassname的浏览器兼容问题    function byClassName(classname,node){        if(node==document&&support.getElementsByClassName||            node.nodeType==1&&support.getElementsByClassName2){            return node.getElementsByClassName(classname);        }else{            var list=node.getElementsByTagName(‘*‘)            var arr=[];            for(var i=0;i<list.length;i++){                // 先判断对象是否有class,如果有的话,则进行下一步                var cc=list[i].getAttribute(‘class‘)                if(cc){                    //因为可以有多个类名,所以要进行判断                   if(indexOf(cc.split(‘ ‘),classname)!=-1){                       arr.push(list[i])                   }                }            }                return arr;        }    }

    var Select= function (selector,results) {        results=results||[];        if(support.qsa){            push.apply(results,document.querySelectorAll(selector))            return unique(results)        }else{            return Select2(selector,results)        }    }

    //兼容trim的兼容问题    function trim(str){        if(support.trim){            return str.trim()        }else{            return str.replace(/^\s|\s$/g,‘‘)        }    }    //数组去重的方法    function unique(arr){        var newarr=[];        for(var i=0;i<arr.length;i++){            if(indexOf(newarr,arr[i])==-1){                newarr.push(arr[i])            }        }        return newarr;    }    // 常用的获取元素的方法    function t(tagname,results){        results=results||[];        push.apply(results,document.getElementsByTagName(tagname));        return  results;    };    function c(classname,results){        results=results||[];        push.apply(results,byClassName(classname,document));        return results;    }    function id(idname,results){        results=results||[];        //判断是否存在id        var rid=document.getElementById(idname)            if(rid){                push.call(results,rid);            }        return results;    }    //如果是组合选择器    function Select2(selector,results){        results=results||[];        //先将组合分割成数组        var list=selector.split(‘,‘);        for(var i=0;i<list.length;i++){            //去除首位的空格            Select3(trim(list[i]),results);        }        return unique(results)    }

    function Select3(selector,results){        results=results||[];        //实现四种选择器        var aa=selector.charAt(0)        //基本选择器中不能有空格        if(selector.split(‘ ‘).length==1){            if(selector==‘*‘){                return t(selector,results)            }else if(aa==‘#‘){                return id(selector.slice(1),results)            }else if(aa==‘.‘){                return c(selector.slice(1),results)            }else{                return t(selector,results)            }        }else{            throw new  Error(‘不支持该选择器‘)        }    }

return Select})()
时间: 2025-01-30 23:20:45

模拟jquery封装简单的Select搜索的相关文章

ajx技术解析以及模拟jQuery封装

1.后台处理程序 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String username = request.getParameter("username"); String password = request.getParameter("password&q

原生JS模拟JQuery封装Ajax

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

js框架封装,模拟jQuery封装

模拟jQuery框架,利用原生的js技术,封装一个js框架,以加深对jQuery的常用api的使用和面向对象原理的理解:一:结构部分首先利用闭包,构造一个自执行函数,然后利用选择器函数Sizzle,获取dom元素:其后设置入口函数jQuery,返回一个F的实例:然后对jQuery.prototype进行设置:其后修改F的原型指向jQuery的原型,最后暴露出去两个接口$和jQuery:二:jQuery.fn.extend = jQuery.extend = function(){}通过向jQue

javascript模拟jQuery封装委托事件,兼容IE

1 var $ = function(id){ 2 var dom = document.getElementById(id); 3 return { 4 on:function(eventType,element,callback){ 5 if(document.addEventListener){ 6 dom.addEventListener(eventType,function(e){ 7 var ev = e || window.event; 8 var target = ev.targ

模拟jQuery简单封装ajax

1 /*模拟jQuery的写法 (简单写法)*/ 2 var $={}; 3 /*ajax*/ 4 $.ajax = function (options) { 5 /* 6 * 请求 7 * 1.请求接口 type get post 默认的是get 决定是否设置请求头 8 * 2.接口地址 url 不确定 字符串 如果用户没有传 默认的接口地址为当前路径 9 * 3.是否是异步 async 默认的就是异步 true;false 是同步请求 10 * 4.提交数据 data 默认的是对象 {nam

html select美化模拟jquery插件select2.js

代码展示:http://www.51xuediannao.com/demo.php 代码说明: select2.js是一个html select美化模拟类jquery插件,但是select2.js又远非简单的模拟美化那么简单,它还具有搜索功能,多选功能(可限制选择数量),ajax方式加载数据,可以设置placeholder, 可以设置禁用状态disabled,并且设置非常简单,如:$(".js-example-disabled").prop("disabled",

解决Select2控件不能在jQuery UI Dialog中不能搜索的bug

本文使用博客园Markdown编辑器进行编辑 1.问题呈现 项目中使用了jQuery UI的Dialog控件,一般用来处理需要提示用户输入或操作的简单页面.逻辑是修改一个广告的图片和标题. 效果截图如下: 使用Select2,主要是因为它支持下拉式搜索.所以在数据稍微多一点,作为搜索选择功能的首选.但是运行出来之后,发现搜索框无法点击.开始想到的index不够大,被其他的元素覆盖了.但是跳转z-index也无法解决.在普通的页面,搜索框是ok的. 2.解决办法 通过Google搜索,发现sele

jQuery实现简单加法,扩展函数

一. jQuery实现简单加法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Simple addition</title> </head> <body> <input type="text" value="" /> + <

模拟tquery封装选择器

<!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> <meta http-equiv="Content-