如图
1)因为id名太长,导致getElementById和jQuery的id选择器都无法取到该id。当然这么长的id是机器生成的,请问大家有什么好的解决这个问题呢?
2)jquery的层次选择器最多能有几层?如下例子
$("div table tr td p .....")
如图
1)因为id名太长,导致getElementById和jQuery的id选择器都无法取到该id。当然这么长的id是机器生成的,请问大家有什么好的解决这个问题呢?
2)jquery的层次选择器最多能有几层?如下例子
$("div table tr td p .....")
汗。。看到这个问题挺奇葩的,特地建了个html试了一下。如截图,都没有问题,请题主检查一下code吧,我把代码贴到下边了,你可以存个html试试看,alert没有问题的。。当然为了方便写的特别简单。
<input type="text" id="1234567890123456789012345678901234567890123456789012345678901234567890" value="xxx"/>
<form name="x" id="12345678901234567890123456789012345678901234567890123456789012345678901"/>
<script>
alert(document.getElementById("1234567890123456789012345678901234567890123456789012345678901234567890").value)
alert(document.getElementById("12345678901234567890123456789012345678901234567890123456789012345678901").name)
</script>
好么。。为了方便都写数字,竟然被人诟病了!看评论的意思是带入了特殊字符就不行了?好吧,我看了题主的id命名,中间带有下划线_和冒号:,下边我补充了带这2个特殊字符的id命名还特地附赠了你所谓的特殊字符@,没有问题,这样可以吗?是不是还要像题主一样那么写呢?对不起,我也不是没事做的人,题主发的是截图,我不可能按照截图把这个命名再写一次。
最近真是怪了,我的答案会被踩,你要是说回答不明确不能帮助到人也就算了,我特地写了个html文件来测试这个问题,竟然也会这样?请问 @白衣岛主 !你自己写文件试过了没有??
如果楼主使用原生的document.getELementById('view:_idx')
绝对没有问题,因为它不对参数进行任何解析,只会把它当一个字符串直接进行匹配。
问题是出在楼主使用的是jquery的方法获取,而jquery会对选择器解析比如会将#
视为id选择器,.
视为class,:
视为结构内伪元素(说到这里,楼主应该知道问题在哪里了吧),>
视为父子结构连接符。
我最近发现,在domino中,有时候javascript的元素选择器都不能取到个别元素,当然jquery的效果也是一样的。原因目前只知道domino的原因。那些id当然也是domino在生成网页时自动生成的。至于具体的我目前并不知道。因为我在我自己做的html中试过,哪怕在id名相同的情况下jquer元素名选择器都能正常使用,可在domino环境下就是不能使用。
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
lz的用例看似没有问题。请检查一下html的id部分的内容有没有输出空格符号,包括:
 
	

​
HTML标准里id的格式要求是这样的:
简要的说,HTML4有很多ID方面的限制,必须以字母开头,只允许字母、数字、或
-_:.
;但HTML5放宽了这方面的限制,唯一的限制是整个树唯一且不允许夹杂空格字符。下面是跟题目可能无关的一些测试结论:
getElementById
方法,不能使用\\:
而应当使用:
查询id带有:
的元素;querySelector
方法,需要针对id中的:
,在其前方加上反引号,形如\\:
,才能正确查询到id带有:
的元素(应当是避免与css选择器:not
等功能重合);\\:
),如果可能的话,在IE8+以上会使用querySelector(也需要\\:
)