首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getElementsByClassName & IE

getElementsByClassName & IE
EN

Stack Overflow用户
提问于 2010-01-15 21:21:55
回答 4查看 2.3K关注 0票数 0

我正试着弄到一些有“特别”这个名字的宝石。我在网上找到了下面的脚本,但它只返回一个空数组。

有人看到什么不对劲了吗?

代码语言:javascript
复制
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)返回一个空数组还是很有趣的

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-15 21:34:08

re =新RegExp('\b‘+类名+ '\b'),

字符串文本中的\b是一个后退字符。他们的意思是:

代码语言:javascript
复制
var re= new RegExp('\\b' + classname + '\\b');

然而,这仍然是错误的,因为:

它不适用于任何包含非ASCII或非字母数字字符的类名,因为这会将单词边界放在错误的place;

  • classnames中,可能包含在正则表达式中具有特殊意义的字符,如.;这些字符需要转义。

您可以在document.getElementsByClassName中找到更好地匹配标准this question接口的替代实现。

票数 3
EN

Stack Overflow用户

发布于 2010-01-15 21:31:20

代码语言:javascript
复制
re = new RegExp('\b' + classname + '\b')

应该是

代码语言:javascript
复制
re = new RegExp('\\b' + classname + '\\b')

此外,您应该在变量解密的开头使用"var“。

票数 5
EN

Stack Overflow用户

发布于 2010-01-15 21:28:11

也许我弄错了,但我不认为re.test(els[i].className)会包含\b单词边界,所以正则表达式失败了。

也就是说,您只是在传递“特殊”,而没有任何空格、引号或其他边界字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2074885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档