我正试着弄到一些有“特别”这个名字的宝石。我在网上找到了下面的脚本,但它只返回一个空数组。
有人看到什么不对劲了吗?
getElementsByClassName = function (node, classname){
var a = [],
re = new RegExp('\b' + classname + '\b'),
els = node.getElementsByTagName("*"),
l = els.length,
i;
for (i = 0; i < l; i += 1) {
if (re.test(els[i].className)) {
a.push(els[i]);
}
}
console.log(a)
return a;
}
var wrap = document.getElementById('wrap');
getElementsByClassName(wrap, 'special')way包含22个子节点,最后一个是<p class="special">Lorem</p>,在firebug中,我一直到找到具有类名的节点,但是它跳过了a.push。我迷路了!
编辑:,好的,现在就可以工作了,但是知道为什么console.log(a)返回一个空数组还是很有趣的
发布于 2010-01-15 21:34:08
re =新RegExp('\b‘+类名+ '\b'),
字符串文本中的\b是一个后退字符。他们的意思是:
var re= new RegExp('\\b' + classname + '\\b');然而,这仍然是错误的,因为:
它不适用于任何包含非ASCII或非字母数字字符的类名,因为这会将单词边界放在错误的place;
.;这些字符需要转义。您可以在document.getElementsByClassName中找到更好地匹配标准this question接口的替代实现。
发布于 2010-01-15 21:31:20
re = new RegExp('\b' + classname + '\b')应该是
re = new RegExp('\\b' + classname + '\\b')此外,您应该在变量解密的开头使用"var“。
发布于 2010-01-15 21:28:11
也许我弄错了,但我不认为re.test(els[i].className)会包含\b单词边界,所以正则表达式失败了。
也就是说,您只是在传递“特殊”,而没有任何空格、引号或其他边界字符。
https://stackoverflow.com/questions/2074885
复制相似问题