isbase
0.3D
V2EX  ›  JavaScript

遇到一个 JavaScript 的问题

By isbase at 2015 年 10 月 21 日 · 3056 次点击

第一段代码显式的设置了 doc[j].hasAttribute(temp)===true ,循环体会执行
而第二段没有,循环体不会执行

doc[j].hasAttribute(temp)的执行结果本来就是 true 和 false

那么第二段代码的循环体为什么不会执行呢?

var doc = document.getElementsByTagName('*');
            for (var j = 0; j < doc.length; j++) {
                if (doc[j].hasAttribute(temp)===true) {
                    element = doc[j]; //会执行
var doc = document.getElementsByTagName('*');
            for (var j = 0; j < doc.length; j++) {
                if (doc[j].hasAttribute(temp)) {
                    element = doc[j]; //不会执行
10 条回复  •  2015-10-21 21:56:38 +08:00
Lpl
   1
Lpl  
   2015 年 10 月 21 日 via Android
我不明白大括号在哪结尾的
domty
   2
domty  
   2015 年 10 月 21 日
我觉得上面那个如果执行了,下面那个也应该执行的
试一下在 for 循环里 log 下 doc[j].hasAttribute(temp)的结果比较下吧 typeof 也 log 下
feiyuanqiu
   3
feiyuanqiu  
   2015 年 10 月 21 日 via iPad
temp 是个变量,看一下你第二段代码有没有给 temp 赋值呢
w88975
   4
w88975  
   2015 年 10 月 21 日
如果两段代码没问题的话,请检查你的 temp 变量是否一致。
isbase
   5
isbase  
OP
PRO
   2015 年 10 月 21 日 via Android
@w88975
@feiyuanqiu
@domty
@Lpl

完整代码附上

function $(selector) {
var str = selector.split(' '),
temp,
element;
for (var i = 0; i < str.length; i++) {
if (str[i].indexOf('#') === 0) {
temp = str[i].replace('#', '');
element = document.getElementById(str2);
} else if (str[i].indexOf('.') === 0) {
temp = str[i].replace('.', '');
console.log(str2);
element = document.getElementsByClassName(str2)[0];
} else if (str[i].indexOf('[') === 0 && str[i].indexOf('=') === -1) {
temp = str[i].replace('[', '').replace(']', '');
console.log(temp)
var doc = document.getElementsByTagName('*');
console.log(temp)
for (var j = 0; j < doc.length; j++) {
console.log(temp)
if (doc[j].hasAttribute(temp)===true) {
console.log(temp)
element = doc[j];
//alert('true')
}
}

}
}
return element;
}
w88975
   6
w88975  
   2015 年 10 月 21 日
@isbase 你的 str2 呢?
isbase
   7
isbase  
OP
PRO
   2015 年 10 月 21 日 via Android
@w88975 str2 忘记改成 temp
w88975
   8
w88975  
   2015 年 10 月 21 日
@isbase 我在 chrome 下测试了你贴的代码,并没有出现你所说的问题
w88975
   9
w88975  
   2015 年 10 月 21 日
isbase
   10
isbase  
OP
PRO
   2015 年 10 月 21 日 via Android
@w88975 用$("[class]")应该可以重现我的问题
推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
© 2026 V2EX · 41ms · 3.9.8.5