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

2015-04-07 20:55:53 +08:00
 tanteng

今天一个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?

7116 次点击
所在节点    jQuery
23 条回复
oott123
2015-04-07 20:58:30 +08:00
$("#three_id") 都是 null 了,哪里来的 $("#three_id").length 呀…
你直接 if $("#three_id") 就好了。
young
2015-04-07 21:01:49 +08:00
都用jquery, 为啥不用 $("#three_id").size()
tanteng
2015-04-07 21:10:35 +08:00
@oott123 你试了没
tanteng
2015-04-07 21:10:51 +08:00
@young 试过不行
oott123
2015-04-07 21:18:02 +08:00
@tanteng 没有,理所当然的想的。
当然你这么一问我就去试了,$('#three_id') 并不是 null ,也是存在 length 属性的,而且 length 也确实为 0。
所以我想,也许是你描述中 “firefox下显示这一行typeof $() null” 的描述不准确。我是根据你的描述中的 null 回复的。
oott123
2015-04-07 21:19:31 +08:00
而且我测试的时候,当页面上不存在 id 为 a 的元素的时候, $('#a').val() 并不会报错而是返回 undefined。
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
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
2015-04-07 22:18:21 +08:00
$.fn.jquery 判断下页面上有没有 jQuery ? jQuery $("#div") 不可能为 null 的
这个 $ 应该是 firebug 自带的那个选择器
kifile
2015-04-07 22:21:54 +08:00
同一个页面中的标签id难道不应该唯一吗?怎么会出现用length判断
shyangs
2015-04-07 22:31:34 +08:00
belin520
2015-04-07 22:36:56 +08:00
[0]
FrankFang128
2015-04-07 22:38:05 +08:00
你们再这样学前端估计会学出毛病。
Google不会哦?
ledzep2
2015-04-07 22:41:34 +08:00
@young size() is deprecated
jugelizi
2015-04-07 22:43:01 +08:00
无语了,除了select不能length而已
SoloCompany
2015-04-07 22:57:39 +08:00
你确认 $ 符号仍然是 jquery?
这样简单的问题还难调试吗,麻烦你在怀疑的地方加个 console.log($ === jQuery)
九成九 $ 符号已经被重新定义过了
Sivan
2015-04-07 22:58:08 +08:00
只要 `if ($("#div").length) { }` 就行了,不需要 `> 0`
tanteng
2015-04-07 23:15:08 +08:00
@SoloCompany 不是的,所有取值都是用得$("#div").val(),这是可能没有div这个id
SoloCompany
2015-04-07 23:28:36 +08:00
@tanteng 无论选择结果是什么,jQ 的选择器一定不会返回 null 或 undefined,而是一个 wrapper,所以,如果你在 firefox 上看到这样的错误 typeof $() null 那么我基本上可以打包票,这个 $ 和 jQuery 一定不是同一个标识符,你自己好好查吧
Lysora
2015-04-08 00:20:28 +08:00
@SoloCompany 是的,jQuery 的元素选择只要不是 Unrecognized Expression(比如只写一个单引号) 是不会报异常的,只要不报异常,都会返回一个 Wrapper,也就是所谓的 jQuery 对象,它具有 jQuery 自身扩展出来的大部分属性和方法,比如 length, size(),且值都大于 0。选择返回的结果并不是一个数组。jQuery( selector )[idx] 返回的才是原生 DOM 对象,可直接用做 if 的条件。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182195

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX