V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
isbase
V2EX  ›  JavaScript

遇到一个 JavaScript 的问题

  •  
  •   isbase · 2015-10-21 18:00:19 +08:00 via Android · 2315 次点击
    这是一个创建于 3328 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一段代码显式的设置了 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 19:41:35 +08:00 via Android
    我不明白大括号在哪结尾的
    domty
        2
    domty  
       2015-10-21 19:50:48 +08:00
    我觉得上面那个如果执行了,下面那个也应该执行的
    试一下在 for 循环里 log 下 doc[j].hasAttribute(temp)的结果比较下吧 typeof 也 log 下
    feiyuanqiu
        3
    feiyuanqiu  
       2015-10-21 20:03:33 +08:00 via iPad
    temp 是个变量,看一下你第二段代码有没有给 temp 赋值呢
    w88975
        4
    w88975  
       2015-10-21 20:27:05 +08:00
    如果两段代码没问题的话,请检查你的 temp 变量是否一致。
    isbase
        5
    isbase  
    OP
       2015-10-21 20:47:48 +08:00 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 21:34:59 +08:00
    @isbase 你的 str2 呢?
    isbase
        7
    isbase  
    OP
       2015-10-21 21:41:14 +08:00 via Android
    @w88975 str2 忘记改成 temp
    w88975
        8
    w88975  
       2015-10-21 21:45:43 +08:00
    @isbase 我在 chrome 下测试了你贴的代码,并没有出现你所说的问题
    w88975
        9
    w88975  
       2015-10-21 21:49:03 +08:00
    isbase
        10
    isbase  
    OP
       2015-10-21 21:56:38 +08:00 via Android
    @w88975 用$("[class]")应该可以重现我的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2471 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:36 · PVG 10:36 · LAX 18:36 · JFK 21:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.