推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
isbase
0.3D

遇到一个 JavaScript 的问题

  •  
  •   isbase · Oct 21, 2015 via Android · 3188 views
    This topic created in 4038 days ago, the information mentioned may be changed or developed.

    第一段代码显式的设置了 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 replies  •  2015-10-21 21:56:38 +08:00
    Lpl
    Lpl
    Oct 21, 2015 via Android
    1
    我不明白大括号在哪结尾的
    domty
    domty
    Oct 21, 2015
    2
    我觉得上面那个如果执行了,下面那个也应该执行的
    试一下在 for 循环里 log 下 doc[j].hasAttribute(temp)的结果比较下吧 typeof 也 log 下
    feiyuanqiu
    feiyuanqiu
    Oct 21, 2015 via iPad
    3
    temp 是个变量,看一下你第二段代码有没有给 temp 赋值呢
    w88975
    w88975
    Oct 21, 2015
    4
    如果两段代码没问题的话,请检查你的 temp 变量是否一致。
    isbase
    isbase
    OP
    Oct 21, 2015 via Android
    5
    @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
    w88975
    Oct 21, 2015
    6
    @isbase 你的 str2 呢?
    isbase
    isbase
    OP
    Oct 21, 2015 via Android
    7
    @w88975 str2 忘记改成 temp
    w88975
    w88975
    Oct 21, 2015
    8
    @isbase 我在 chrome 下测试了你贴的代码,并没有出现你所说的问题
    w88975
    w88975
    Oct 21, 2015
    9
    isbase
    isbase
    OP
    Oct 21, 2015 via Android
    10
    @w88975 用$("[class]")应该可以重现我的问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2424 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 04:54 · PVG 12:54 · LAX 20:54 · JFK 23:54
    ♥ Do have faith in what you're doing.