V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tanteng
V2EX  ›  jQuery

jquery 判断一个 id 选择器存不存在难道不是用$("#div").length>0 吗

  •  
  •   tanteng · 2015-04-07 20:55:53 +08:00 · 7114 次点击
    这是一个创建于 3517 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天一个ajax请求发生错误,原因是一个参数没有得到值,比如
    var three_id = $("#three_id").val();

    firefox下显示这一行typeof $() null,页面上也没有id为three_id的选择器,于是报错了。

    我用
    if($("#three_id").length>0){
    var three_id = $("#three_id").val();
    }
    这样进行了判断,如果有这个id选择器就执行这一句,结果页面上没有这个id还是执行这一句,于是报错了。

    当页面上存在这个id选择器的时候,就是正常的,这个#three_id 是动态生成的。

    后来我不得不这样做才解决问题:
    try{
    var three_id = $("#three_id").val();
    }catch(e){

    }

    WHY?

    23 条回复    2015-04-09 20:28:18 +08:00
    oott123
        1
    oott123  
       2015-04-07 20:58:30 +08:00 via Android
    $("#three_id") 都是 null 了,哪里来的 $("#three_id").length 呀…
    你直接 if $("#three_id") 就好了。
    young
        2
    young  
       2015-04-07 21:01:49 +08:00
    都用jquery, 为啥不用 $("#three_id").size()
    tanteng
        3
    tanteng  
    OP
       2015-04-07 21:10:35 +08:00
    @oott123 你试了没
    tanteng
        4
    tanteng  
    OP
       2015-04-07 21:10:51 +08:00
    @young 试过不行
    oott123
        5
    oott123  
       2015-04-07 21:18:02 +08:00
    @tanteng 没有,理所当然的想的。
    当然你这么一问我就去试了,$('#three_id') 并不是 null ,也是存在 length 属性的,而且 length 也确实为 0。
    所以我想,也许是你描述中 “firefox下显示这一行typeof $() null” 的描述不准确。我是根据你的描述中的 null 回复的。
    oott123
        6
    oott123  
       2015-04-07 21:19:31 +08:00
    而且我测试的时候,当页面上不存在 id 为 a 的元素的时候, $('#a').val() 并不会报错而是返回 undefined。
    gamexg
        7
    gamexg  
       2015-04-07 21:54:25 +08:00
    if ($("aaaaaaaaaaa")){console.log("a")}
    a
    undefined
    if ($("aaaaaaaaaaa").size()){console.log("a")}
    undefined
    $("aaaaaaaaaaa").size()
    0
    if ($("a").size()){console.log("a")}
    a
    undefined
    $("aaaaaaaaaaa")
    []
    gamexg
        8
    gamexg  
       2015-04-07 21:57:05 +08:00
    $("aaaaaaaa").length
    0
    if($("aaaaaaaa").length){console.log("a")}
    undefined
    if($("a").length){console.log("a")}
    a
    undefined
    if($("a").length>0){console.log("a")}
    a
    undefined
    if($("aaaaaaaa").length>0){console.log("a")}
    undefined

    length 也正常啊。
    Sin
        9
    Sin  
       2015-04-07 22:18:21 +08:00
    $.fn.jquery 判断下页面上有没有 jQuery ? jQuery $("#div") 不可能为 null 的
    这个 $ 应该是 firebug 自带的那个选择器
    kifile
        10
    kifile  
       2015-04-07 22:21:54 +08:00
    同一个页面中的标签id难道不应该唯一吗?怎么会出现用length判断
    belin520
        12
    belin520  
       2015-04-07 22:36:56 +08:00 via Android
    [0]
    FrankFang128
        13
    FrankFang128  
       2015-04-07 22:38:05 +08:00 via Android
    你们再这样学前端估计会学出毛病。
    Google不会哦?
    ledzep2
        14
    ledzep2  
       2015-04-07 22:41:34 +08:00
    @young size() is deprecated
    jugelizi
        15
    jugelizi  
       2015-04-07 22:43:01 +08:00
    无语了,除了select不能length而已
    SoloCompany
        16
    SoloCompany  
       2015-04-07 22:57:39 +08:00
    你确认 $ 符号仍然是 jquery?
    这样简单的问题还难调试吗,麻烦你在怀疑的地方加个 console.log($ === jQuery)
    九成九 $ 符号已经被重新定义过了
    Sivan
        17
    Sivan  
       2015-04-07 22:58:08 +08:00
    只要 `if ($("#div").length) { }` 就行了,不需要 `> 0`
    tanteng
        18
    tanteng  
    OP
       2015-04-07 23:15:08 +08:00
    @SoloCompany 不是的,所有取值都是用得$("#div").val(),这是可能没有div这个id
    SoloCompany
        19
    SoloCompany  
       2015-04-07 23:28:36 +08:00
    @tanteng 无论选择结果是什么,jQ 的选择器一定不会返回 null 或 undefined,而是一个 wrapper,所以,如果你在 firefox 上看到这样的错误 typeof $() null 那么我基本上可以打包票,这个 $ 和 jQuery 一定不是同一个标识符,你自己好好查吧
    Lysora
        20
    Lysora  
       2015-04-08 00:20:28 +08:00
    @SoloCompany 是的,jQuery 的元素选择只要不是 Unrecognized Expression(比如只写一个单引号) 是不会报异常的,只要不报异常,都会返回一个 Wrapper,也就是所谓的 jQuery 对象,它具有 jQuery 自身扩展出来的大部分属性和方法,比如 length, size(),且值都大于 0。选择返回的结果并不是一个数组。jQuery( selector )[idx] 返回的才是原生 DOM 对象,可直接用做 if 的条件。
    NCE
        21
    NCE  
       2015-04-08 08:51:38 +08:00
    jq 版本问题吧lz,以前$('').length是可以的
    iyaozhen
        22
    iyaozhen  
       2015-04-08 13:46:45 +08:00
    楼主能否说一下 jquery 的版本。这样 if($("#three_id").length>0) 应该是没错的。
    IamJ
        23
    IamJ  
       2015-04-09 20:28:18 +08:00 via Android
    一直用
    if ($('#abc')[0])
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2556 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:29 · PVG 18:29 · LAX 02:29 · JFK 05:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.