当前位置:  开发笔记 > 编程语言 > 正文

jQuery是否存在"存在"功能?

如何解决《jQuery是否存在"存在"功能?》经验,为你挑选了34个好方法。

如何在jQuery中检查元素的存在?

我当前的代码是这样的:

if ($(selector).length > 0) {
    // Do something
}

有更优雅的方式来解决这个问题吗?也许是插件或功能?



1> Tim Büthe..:

在JavaScript中,一切都是'真实'或'虚假',而数字0(和NaN)意味着false,其他一切true.所以你可以写:

if ($(selector).length)

你不需要那个>0部分.


@ abhirathore2006如果使用id选择器并且该元素不存在则length为0并且不会抛出异常.
@Robert和`[] + []`=`""``啊啊我喜欢javascript
有趣的是,"NaN!= false".
@James那是因为`[] .toString()=== [] .join(',')===""`和`""===""`
@Robert和`typeof NaN =='number'`

2> Jake McGraw..:

是!

jQuery.fn.exists = function(){ return this.length > 0; }

if ($(selector).exists()) {
    // Do something
}

这是对Jeff Atwood的Herding Code播客的回应


您的`$ .fn.exists`示例正在用两个函数调用替换属性查找(便宜!),这两个函数调用要贵得多 - 其中一个函数调用会重新创建一个已经拥有的jQuery对象,这很愚蠢.
我只写:if($(selector).length){...}没有'> 0'
@redsquare:代码可读性是在jQuery上添加这种函数的最佳理由.有一个名为`.exists`的东西干净利落,而`.length`读取的语义不同,即使语义与相同的结果一致.
在我看来,它至少是一个逻辑间接,从"列表长度大于零"的概念到"我为可存在的选择器编写的元素"的概念.是的,它们在技术上是相同的,但概念抽象处于不同的层面.这导致一些人更喜欢更明确的指标,即使在某些性能成本下也是如此.
@quixoto,抱歉,但.length是许多语言的标准,不需要包装.你怎么解释.length?
"有些人在面对问题时,会想'我知道,我会扩展基础库.' 现在他们有两个问题." 一旦你定义了这个函数并开始在任何地方使用`.exists()`,在没有这样的函数定义的情况下,所有代码都变得不可移植.听起来这会降低可维护性.
很好的答案......但尝试任何数字,例如:$(666).exists()//结果为真(错误)
真是个可怕的答案.如果选择器匹配数百个节点并且第一个节点"存在",该怎么办?它应该保释并立即返回真实.没有必要为其余部分烦恼.例如:`if($('div.tag:contains("nsfw")').exist())agecheck();`在imageboard上的东西
`jQuery`集合将"存在",无论它是否为空.对于代码可读性,你不需要'Array.prototype.exists = function(){return this.length;}`.

3> Jon Erickson..:

如果你用过

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }

你会暗示链接是可能的,但事实并非如此.

这会更好:

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }

或者,从FAQ:

if ( $('#myDiv').length ) { /* Do something */ }

您还可以使用以下内容.如果jQuery对象数组中没有值,那么获取数组中的第一个项将返回undefined.

if ( $('#myDiv')[0] ) { /* Do something */ }


为什么你需要链接这个?`$(".missing").css("color","red")`已经做对了......(即什么都没有)
已经存在不可链接的方法,如attr和data函数.我确实看到了你的观点,并且,为了它的价值,我只测试长度> 0.
是的,但是再一次,你暗示链接是可能的,如果我试图做一些像$(选择器).exists().css("color","red")那样它就行不通了然后我会=*(
关于链接的东西是完整的 - 有很多jQuery` $ .fn`方法返回除了新的jQuery对象之外的东西,因此不会链接.
第一种方法读得更好.$("a").exists()读为"if 元素存在." $ .exists("a")读作"如果存在元素".

4> 小智..:

你可以用这个:

// if element exists
if($('selector').length){ /* do something */ }

// if element does not exist
if(!$('selector').length){ /* do something */ }


你有没有看到TimBüthe在你之前两年已经给出了这个[答案](http://stackoverflow.com/a/587408/2188245)?
Pfft,Tim从未展示如何测试该元素是否不存在.
这个答案和评论总结了stackoverflow的工作原理

5> Magne..:

检查存在的最快和最语义的自我解释方法实际上是使用plain JavaScript:

if (document.getElementById('element_id')) {
    // Do something
}

写入比jQuery长度替换要长一些,但执行速度更快,因为它是本机JS方法.

它比编写自己的jQuery函数更好.由于@snover的原因,这种替代方案较慢.但它也会给其他程序员一种印象,即exists()函数是jQuery固有的东西.JavaScript编辑代码的其他人应该/应该理解,而不会增加知识债务.

注意:注意之前缺少'#' element_id(因为这是普通的JS,不是jQuery).


完全不一样的东西.JQuery选择器可用于任何CSS规则 - 例如`$('#foo a.special')`.它可以返回多个元素.`getElementById`无法开始接近.
JS引擎中速度的论点只会在没有jQuery的情况下无法运行的人心中死亡,因为这是他们无法获胜的论点.
@Noz`if(document.querySelector("#foo a.special"))`会起作用.不需要jQuery.
还记得我们曾经拥有的document.getElementById过去的美好时光吗?我总是忘记这份文件.并且无法弄清楚为什么它不起作用.而且我总是把它拼写错误并且让字符大小错误.
你是正确的,它不像选择器那样广泛适用.但是,它在最常见的情况下完成工作(检查是否存在单个元素).自我解释和速度的论点仍然存在.
祝你好运``visible`或任何其他自定义jquery选择器
如果必须,我将退出编写JavaScript:1)在没有调试控制台的情况下工作或2)在`getElementById`下工作
显然,vanilla JS方法更快,但请注意,问题没有指定按元素id选择,所以实际上你需要`document.querySelector()`,甚至不能处理jQuery可以的所有选择器.因此,为此目的调用单个本机JS函数是*good*,在某些情况下,您必须编写额外的代码.(另外,`if($(selector).length)`非常明显 - 我真的不认为这会让任何人混淆任何JS经验.)

6> Salman A..:

您可以通过编写来节省几个字节:

if ($(selector)[0]) { ... }

这工作,因为每一个jQuery对象也伪装成一个数组,所以我们可以使用数组语法运营商从一开始的第一个项目阵列.undefined如果指定索引处没有项目,则返回.


不,`jQuery.first()`或`jQuery.eq(0)`都返回对象,即使它们是空的,对象也是真的.这个例子应该说明为什么这些函数不能按原样使用:`if(jQuery("#does-not-exists").eq(0))alert("#does-not-exists exists")`
@JasonWilczak关注为什么不这样做:.eq [0]或.first()来引用找到的第一个元素而不是类型转换?

7> Devon..:

您可以使用:

if ($(selector).is('*')) {
  // Do something
}

一个更优雅,也许.


这对于这么简单的事情来说太过分了.看到TimBüthe的答案

8> SpYk3HH..:

此插件可以在if类似if ($(ele).exist()) { /* DO WORK */ }或使用回调的语句中使用.

插入

;;(function($) {
    if (!$.exist) {
        $.extend({
            exist: function() {
                var ele, cbmExist, cbmNotExist;
                if (arguments.length) {
                    for (x in arguments) {
                        switch (typeof arguments[x]) {
                            case 'function':
                                if (typeof cbmExist == "undefined") cbmExist = arguments[x];
                                else cbmNotExist = arguments[x];
                                break;
                            case 'object':
                                if (arguments[x] instanceof jQuery) ele = arguments[x];
                                else {
                                    var obj = arguments[x];
                                    for (y in obj) {
                                        if (typeof obj[y] == 'function') {
                                            if (typeof cbmExist == "undefined") cbmExist = obj[y];
                                            else cbmNotExist = obj[y];
                                        }
                                        if (typeof obj[y] == 'object' && obj[y] instanceof jQuery) ele = obj[y];
                                        if (typeof obj[y] == 'string') ele = $(obj[y]);
                                    }
                                }
                                break;
                            case 'string':
                                ele = $(arguments[x]);
                                break;
                        }
                    }
                }

                if (typeof cbmExist == 'function') {
                    var exist =  ele.length > 0 ? true : false;
                    if (exist) {
                        return ele.each(function(i) { cbmExist.apply(this, [exist, ele, i]); });
                    }
                    else if (typeof cbmNotExist == 'function') {
                        cbmNotExist.apply(ele, [exist, ele]);
                        return ele;
                    }
                    else {
                        if (ele.length <= 1) return ele.length > 0 ? true : false;
                        else return ele.length;
                    }
                }
                else {
                    if (ele.length <= 1) return ele.length > 0 ? true : false;
                    else return ele.length;
                }

                return false;
            }
        });
        $.fn.extend({
            exist: function() {
                var args = [$(this)];
                if (arguments.length) for (x in arguments) args.push(arguments[x]);
                return $.exist.apply($, args);
            }
        });
    }
})(jQuery);

的jsfiddle

您可以指定一个或两个回调.第一个将触发如果元素存在,如果元素没有第二人会火存在.但是,如果您选择仅传递一个函数,则只会在元素存在时触发.因此,如果所选择的元素并链条会死存在.当然,如果确实存在,第一个函数将触发,链将继续.

请记住,使用回调变量有助于保持可链接性 - 返回元素,您可以像使用任何其他jQuery方法一样继续链接命令!

示例用途

if ($.exist('#eleID')) {    /*    DO WORK    */ }        //    param as STRING
if ($.exist($('#eleID'))) { /*    DO WORK    */ }        //    param as jQuery OBJECT
if ($('#eleID').exist()) {  /*    DO WORK    */ }        //    enduced on jQuery OBJECT

$.exist('#eleID', function() {            //    param is STRING && CALLBACK METHOD
    /*    DO WORK    */
    /*    This will ONLY fire if the element EXIST    */
}, function() {            //    param is STRING && CALLBACK METHOD
    /*    DO WORK    */
    /*    This will ONLY fire if the element DOES NOT EXIST    */
})

$('#eleID').exist(function() {            //    enduced on jQuery OBJECT with CALLBACK METHOD
    /*    DO WORK    */
    /*    This will ONLY fire if the element EXIST    */
})

$.exist({                        //    param is OBJECT containing 2 key|value pairs: element = STRING, callback = METHOD
    element: '#eleID',
    callback: function() {
        /*    DO WORK    */
        /*    This will ONLY fire if the element EXIST    */
    }
})



9> Alireza..:

我看到大部分的答案在这里是不准确的,因为他们应该是,他们检查元素长度,也可以是确定在许多情况下,但不是100%,想象一下,如果数传给而不是函数,所以我原型机检查所有功能条件并返回应该是的答案:

$.fn.exists = $.fn.exists || function() { 
  return !!(this.length && (this[0] instanceof HTMLDocument || this[0] instanceof HTMLElement)); 
}

这将检查长度和类型,现在您可以这样检查:

$(1980).exists(); //return false
$([1,2,3]).exists(); //return false
$({name: 'stackoverflow', url: 'http://www.stackoverflow.com'}).exists(); //return false
$([{nodeName: 'foo'}]).exists() // returns false
$('div').exists(); //return true
$('.header').exists(); //return true
$(document).exists(); //return true
$('body').exists(); //return true



10> amypellegrin..:

真的不需要jQuery.使用纯JavaScript,检查以下内容更容易,语义更正确:

if(document.getElementById("myElement")) {
    //Do something...
}

如果由于任何原因您不想将id放入元素,您仍然可以使用任何其他用于访问DOM的JavaScript方法.

jQuery非常酷,但不要让纯粹的JavaScript被遗忘......


我知道:它没有直接回答原始问题(要求jquery函数),但在这种情况下,答案将是"否"或"不是语义上正确的解决方案".

11> Amitābha..:

你可以用这个:

jQuery.fn.extend({
    exists: function() { return this.length }
});

if($(selector).exists()){/*do something*/}



12> technosaurus..:

所有以前的答案都需要.length参数的原因是它们主要使用jquery的$()选择器,它在幕后有querySelectorAll(或者它们直接使用它).这个方法相当慢,因为它需要解析整个DOM树,寻找与该选择器的所有匹配并用它们填充数组.

['length']参数不是必需的或有用的,如果直接使用代码将会快得多document.querySelector(selector),因为它返回匹配的第一个元素,如果没有找到则返回null.

function elementIfExists(selector){  //named this way on purpose, see below
    return document.querySelector(selector);
}
/* usage: */
var myelement = elementIfExists("#myid") || myfallbackelement;

然而,这种方法让我们返回实际的对象; 如果它不会被保存为变量并重复使用,那么这是很好的(如果我们忘记的话,保持参考).

var myel=elementIfExists("#myid");
// now we are using a reference to the element which will linger after removal
myel.getParentNode.removeChild(myel);
console.log(elementIfExists("#myid")); /* null */
console.log(myel); /* giant table lingering around detached from document */
myel=null; /* now it can be garbage collected */

在某些情况下,这可能是期望的.它可以在这样的for循环中使用:

/* locally scoped myel gets garbage collected even with the break; */
for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel))
    if (myel == myblacklistedel) break;

如果你实际上并不需要这个元素并想要获得/存储一个真/假,那就加倍吧!它适用于解开的鞋子,为什么要在这里打结?

function elementExists(selector){
    return !!document.querySelector(selector);
}
/* usage: */
var hastables = elementExists("table");  /* will be true or false */
if (hastables){
    /* insert css style sheet for our pretty tables */
}
setTimeOut(function (){if (hastables && !elementExists("#mytablecss"))
                           alert("bad table layouts");},3000);



13> hiway..:

$.contains()你想要的是什么?

jQuery.contains( container, contained )

$.contains()如果第二个参数提供的DOM元素是第一个参数提供的DOM元素的后代,则该方法返回true,无论它是直接子节点还是嵌套更深.否则,它返回false.仅支持元素节点; 如果第二个参数是文本或注释节点,$.contains()则返回false.

注意:第一个参数必须是DOM元素,而不是jQuery对象或纯JavaScript对象.


这不接受选择器,这意味着他必须选择它,这意味着他可以只检查他的选择结果.

14> Oleg..:

我发现if ($(selector).length) {}不够.当它selector是一个空对象时,它会默默地破坏你的应用程序{}.

var $target = $({});        
console.log($target, $target.length);

// Console output:
// -------------------------------------
// [? Object              ] 1
//    ? __proto__: Object

我唯一的建议是进行额外的检查{}.

if ($.isEmptyObject(selector) || !$(selector).length) {
    throw new Error('Unable to work with the given selector.');
}

我仍在寻找更好的解决方案,因为这个有点重.

编辑:警告!selector字符串时,这在IE中不起作用.

$.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE


您多久发现一次以空对象作为参数调用`$()`?
@cpburnz你为什么问我?我只是一个API提供者......人们将各种愚蠢的东西传递给API.
刚刚注意到,@ FagnerBrack引用的jquery问题帖子在评论后不久就更新了; 看起来它毕竟不会消失.
你为什么要将空对象`{}`传递给`$()`?

15> Anurag Deoka..:

您可以使用java脚本中的长度来检查元素是否存在.如果length大于零,则如果length为零则存在元素,则元素不存在

// These by Id
if( $('#elementid').length > 0){
  // Element is Present
}else{
  // Element is not Present
}

// These by Class
if( $('.elementClass').length > 0){
  // Element is Present
}else{
  // Element is not Present
}


你真的读过这个问题吗?这与OP正在使用的方法完全相同.
您无需检查天气长度是否大于0,如果($('#lementid').长度){}就足够了.

16> Tilak Maddy..:

在官方jQuery网站上整齐地记录检查元素是否存在!

使用选择器返回的jQuery集合的.length属性:

if ($("#myDiv").length) {
    $("#myDiv").show();
}

请注意,并不总是需要测试元素是否存在.以下代码将显示该元素是否存在,如果不存在则不执行任何操作(没有错误):

$("#myDiv").show();



17> Santiago Her..:

这与所有答案非常相似,但为什么不使用!运算符两次,这样你就可以得到一个布尔值:

jQuery.fn.exists = function(){return !!this.length};

if ($(selector).exists()) {
    // the element exists, now what?...
}


因为`Boolean(x)`可以*有时*更有效率.

18> SJG..:
$(selector).length && //Do something


我讨厌这些避免使用`if`的聪明方法,其中`if`会以2字节为代价提高可读性.

19> 小智..:

尝试测试DOM元素

if (!!$(selector)[0]) // do stuff



20> Oliver..:

受到hiway回答的启发,我提出了以下建议:

$.fn.exists = function() {
    return $.contains( document.documentElement, this[0] );
}

jQuery.contains接受两个DOM元素并检查第一个元素是否包含第二个元素.

当我们想要仅仅应用它来检查当前文档中元素的存在时,使用document.documentElement第一个参数来实现exists方法的语义.

下面,我已经放在一起进行比较的一个片段jQuery.exists()反对$(sel)[0]$(sel).length接近,两者均返回truthy的值$(4),而$(4).exists()回报false.在检查 DOM中元素是否存在的上下文中,这似乎是期望的结果.

$.fn.exists = function() {
    return $.contains(document.documentElement, this[0]); 
  }
  
  var testFuncs = [
    function(jq) { return !!jq[0]; },
    function(jq) { return !!jq.length; },
    function(jq) { return jq.exists(); },
  ];
    
  var inputs = [
    ["$()",$()],
    ["$(4)",$(4)],
    ["$('#idoexist')",$('#idoexist')],
    ["$('#idontexist')",$('#idontexist')]
  ];
  
  for( var i = 0, l = inputs.length, tr, input; i < l; i++ ) {
    input = inputs[i][1];
    tr = "" + inputs[i][0] + ""
          + testFuncs[0](input) + ""
          + testFuncs[1](input) + ""
          + testFuncs[2](input) + "";
    $("table").append(tr);
  }
td { border: 1px solid black }

#idoexist
Input!!$(sel)[0]!!$(sel).length$(sel).exists()


21> 小智..:

我只想使用普通的香草javascript来做到这一点.

function isExists(selector){
  return document.querySelectorAll(selector).length>0;
}



22> Pawel..:

不需要jQuery

if(document.querySelector('.a-class')) {
  // do something
}



23> Eternal1..:

我偶然发现了这个问题,我想分享一下我目前使用的代码片段:

$.fn.exists = function(callback) {
    var self = this;
    var wrapper = (function(){
            function notExists () {}

            notExists.prototype.otherwise = function(fallback){
                if (!self.length) {                    
                    fallback.call();
                }
            };

            return new notExists;
        })();

    if(self.length) {
        callback.call();    
    }

    return wrapper;
}

现在我可以写这样的代码 -

$("#elem").exists(function(){
    alert ("it exists");
}).otherwise(function(){
    alert ("it doesn't exist");
});

它可能看起来很多代码,但是当用CoffeeScript编写它时它很小:

$.fn.exists = (callback) ->
    exists = @length
    callback.call() if exists        
    new class
       otherwise: (fallback) ->            
            fallback.call() if not exists


我发现OP的原始方法不仅要小得多,而且要比这更优雅.当OP的方法更短,并且不涉及回调时,似乎有点过多来编写这么多代码.
在什么复杂的情况下,这种方法比简单的if/else语句更好?

24> jcreamer898..:

我有一个案例,我想看看一个对象是否存在于另一个内部,所以我在第一个答案中添加了一些内容来检查选择器内的选择器.

// Checks if an object exists.
// Usage:
//
//     $(selector).exists()
//
// Or:
// 
//     $(selector).exists(anotherSelector);
jQuery.fn.exists = function(selector) {
    return selector ? this.find(selector).length : this.length;
};



25> GSTAR..:

怎么样:

function exists(selector) {
    return $(selector).length;
}

if (exists(selector)) {
    // do something
}

它非常小,可以节省您$()每次都必须包含选择器.


这读作"if exists thing"而不是"if thing exists",其中`if($("#thing").exists(){}`读为.而且,它不是jQuery方式.

26> andy_314..:

我正在使用这个:

    $.fn.ifExists = function(fn) {
      if (this.length) {
        $(fn(this));
      }
    };
    $("#element").ifExists( 
      function($this){
        $this.addClass('someClass').animate({marginTop:20},function(){alert('ok')});               
      }
    ); 

仅当存在jQuery元素时才执行链 - http://jsfiddle.net/andres_314/vbNM3/2/



27> ducdhm..:

这是我exist在jQuery中最喜欢的方法

$.fn.exist = function(callback) {
    return $(this).each(function () {
        var target = $(this);

        if (this.length > 0 && typeof callback === 'function') {
            callback.call(target);
        }
    });
};

和其他版本,当选择器不存在时支持回调

$.fn.exist = function(onExist, onNotExist) {
    return $(this).each(function() {
        var target = $(this);

        if (this.length > 0) {
            if (typeof onExist === 'function') {
                onExist.call(target);
            }
        } else {
            if (typeof onNotExist === 'function') {
                onNotExist.call(target);
            }
        }
    });
};

例:

$('#foo .bar').exist(
    function () {
        // Stuff when '#foo .bar' exists
    },
    function () {
        // Stuff when '#foo .bar' does not exist
    }
);



28> Kamuran Söne..:

$("selector")返回一个具有该length属性的对象.如果选择器找到任何元素,它们将包含在对象中.因此,如果检查其长度,您可以查看是否存在任何元素.在JavaScript中0 == false,所以如果你没有得到0你的代码就会运行.

if($("selector").length){
   //code in the case
} 


"给阵列" - 不,它没有.它为您提供了一个jQuery对象(它与一个数组共享一些属性).你的回答与2009年的TimBüthe基本相同.

29> abhirathore2..:

下面是不同情况的完整示例以及检查元素是否存在的方法如果使用direct on jQuery选择器可能会或可能不会工作,因为它返回数组或元素.

var a = null;

var b = []

var c = undefined ;

if(a) { console.log(" a exist")} else { console.log("a doesn't exit")}
// output: a doesn't exit

if(b) { console.log(" b exist")} else { console.log("b doesn't exit")}
// output: b exist

if(c) { console.log(" c exist")} else { console.log("c doesn't exit")}
// output: c doesn't exit

最终解决方案

if($("#xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
//output : xusyxxs doesnn't exist

if($(".xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
    //output : xusyxxs doesnn't exist



30> Andrei Todor..:

您不必检查它是否大于0喜欢$(selector).length > 0,$(selector).length这是不够的和优雅的方式来检查元素的存在.如果你想做更多额外的事情,我认为仅仅为此编写一个函数是值得的,是的.

if($(selector).length){
  // true if length is not 0
} else {
  // false if length is 0
}



31> 小智..:
if ( $('#myDiv').size() > 0 ) { //do something }

size() 计算选择器返回的元素数


@Furbeenator我不知道你从哪里得到你的信息,但`.size()`只会返回`.length`.它有一个被弃用的原因

32> Sunil Kumar..:

是这样做的最佳方法:

通过JQuery:

if($("selector").length){
   //code in the case
}

selector可以是Element IDORElement Class

要么

如果您不想使用jQueryLibrary,则可以使用Core实现此目的JavaScript:

通过JavaScript:

if(document.getElementById("ElementID")) {
    //Do something...
}



33> Hassan Sadeg..:

试试这个.

简单,简洁,可在整个项目中使用:

jQuery.fn.exists=function(){return !!this[0];}; //jQuery Plugin

用法:

console.log($("element-selector").exists());

_________________________________

或者甚至是SHORTER :( 你不想定义一个jQuery插件时):

if(!!$("elem-selector")[0]) ...;

甚至

if($("elem-selector")[0]) ...;



34> 小智..:

一个简单的实用程序函数,用于id和class选择器。

   function exist(IdOrClassName, IsId) {
        var elementExit = false;
        if (IsId) {
            elementExit= $("#" + "" + IdOrClassName + "").length ? true : false;
        }
        else {
                elementExit = $("." + "" + IdOrClassName + "").length ? true : false;
        }
        return elementExit;
    } 

像下面这样调用此函数

    $(document).ready(function () {
            $("#btnCheck").click(function () {
//address is the id so IsId is true. if address is class then need to set IsId false
                if (exist("address", true)) {
                    alert("exist");
                }
                else {
                    alert("not exist");
                }

            });
        });


这样,您可以将其放入全局名称空间。您可能需要重新考虑。
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有