Javascript getElementsByClassName&;即
我试图得到一些类名为“特殊”的元素。 我在网上找到了以下脚本,但它只返回一个空数组 有人知道怎么了吗Javascript getElementsByClassName&;即,javascript,regex,Javascript,Regex,我试图得到一些类名为“特殊”的元素。 我在网上找到了以下脚本,但它只返回一个空数组 有人知道怎么了吗 getElementsByClassName = function (node, classname){ var a = [], re = new RegExp('\b' + classname + '\b'), els = node.getElementsByTagName("*"), l = els.length, i; for (i = 0; i &l
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')
getElementsByClassName=函数(节点,类名){
变量a=[],
re=new RegExp('\b'+classname+'\b'),
els=node.getElementsByTagName(“*”),
l=els.长度,
我
对于(i=0;i
wrap包含22个子节点,最后一个是Lorem
,在firebug中,我一直在寻找具有类名的节点,但随后它跳过了a.push。我迷路了
编辑:
好吧,现在它确实可以工作了,但是知道为什么console.log(a)返回一个空数组还是很有趣的,也许我错了,但是我不认为
re.test(els[I].className)
会包含\b
单词边界,所以正则表达式失败
也就是说,您只是传递“special”,周围没有任何空格、引号或其他边界字符
re = new RegExp('\b' + classname + '\b')
应该是
re = new RegExp('\\b' + classname + '\\b')
此外,您还应在变量偏差的开头使用“var”
re=new RegExp('\b'+classname+'\b')
字符串文字中的\b
是退格字符。他们的意思是:
var re= new RegExp('\\b' + classname + '\\b');
但这仍然是错误的,因为:
;这些都需要逃脱您可以找到一个与标准
文档匹配的替代实现。GetElementsByCassName
接口更好。我认为您需要做的是:
els = document.all ? node.all : node.getElementsByTagName("*")
我忘记了IE的哪些版本不喜欢node.getElementsByTagName(“*”),但我肯定在某些版本中它会失败。它将查找带有星号标记名的节点
我过去为此使用的实际代码如下所示:
function getElementsByTagName(node, tag) {
tag = tag || '*';
var els = node.getElementsByTagName(tag);
if( !els.length && (tag == '*' && node.all) ) els = node.all;
}
我想做的是:if(wrap.getElementsByClassName('ar').length){do..}如果FF可以正常工作,但不在ie中,因为它不支持getElementsByClassName“ar a=new Array();”行。。。它不应该是“var a=new Array();”或者更好,“var a=[];“哦,'ar'插入我认为新数组比[]更好无论如何,我两个都试过了,没有区别=/…所以请在没有\b的情况下试一下。。。哦,或者实际上您需要'\\b'+classname+'\\b'。现在我对此一无所知。当我调试并使用\\b+classname\\b时,我得到了:re=/\bspecial\b/关于各种字符的好观点。=)你完全正确,说得好!我不会再使用这个了,但是我确信类名是“特殊的”而不是别的,所以我想它在这个特殊的情况下是有效的。别难过,这是一个正常的错误=)你也应该检查一下bobince在回答中提到的要点。事实上,你可以让这个答案成为“被接受的答案”,因为它比我的答案有更多的信息!你不是个好人吗;-)把它给了bobince,竖起了你的大拇指,谢谢!在我的世界里,知识胜过速度。尤其是当时差低至5分钟时谢谢你这么做,但是你在寻找标记名,我在寻找类名。
getElementsByTagName(“*”)
错误在IE6中得到了修复。