issaxite
12/26/2017 - 11:19 AM

js:数字开头selector名问题浅析.md

前言

朋友问起我一些关于怎么查找节点的问题,我下意识就给他推荐了querySelector[All],并自鸣得意地说,灵活方便,堪比jq的选择器查找,(在我看来也确实如此):flushed:。

没错多久就出问题了,光速打脸:pensive:

虽然他的id名起得也是很迷人:sweat_smile:。


问题是什么?

他跟我说,出问题部分元素是动态插入的,静态的就没有问题,其实不是,就算是静态的元素也会出问题

最开始我以为是querySelector本身的问题,因此专门去JS BIN试了一下,如下:

var div = document.createElement('div');
div.id = "coder";
div.textContent = "issac_宝华";
document.body.appendChild(div);

var idName = document.querySelector("#coder").id;
console.log(idName);

不论我是用createElementinnerHTML都是没有问题。我质疑说,是不是你id名写错了。然后继续打脸:scream:,而且就算是id名写错的也不会报错,最多就是返回个空,一脸懵逼,难道真的不行。

据他说,用我推荐的querySelector会有问题,但是用他自己代码的getElementById就没有问题,还有那么邪门:zap:

难道是id名的问题?!我直接叫他复制id名给我试试。

如果有人认为是兼容性的问题,那就大可放心了:

Can I Use querySelector/querySelectorAll ?


测试

马蛋:new_moon_with_face:,竟然还真是……

过分了,过分了,不会是因为id名太长吧!测试了,不是的

变态到这样也是没有问题的,测试到这里也该看出端倪了,

是不是因为数字开头!

别说,还真是……

最神奇的是,用getElementById就算使用数字开头的名字也是没有问题的,Orz

爽到没有:joy:!


最后

就算是getElementById有更强的容错,但是我还是会继续用querySelector,毕竟那么生儿为人20几年没有试过用过如此怪异的selector name。:eyes: