Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 能否在数组中使用document.querySelector(“abc”)?_Javascript_Html_Dom - Fatal编程技术网

Javascript 能否在数组中使用document.querySelector(“abc”)?

Javascript 能否在数组中使用document.querySelector(“abc”)?,javascript,html,dom,Javascript,Html,Dom,我的问题是出现“TypeError:无法在updatePrice处将属性'innerText'设置为null”错误。我想知道我的问题是否在选择器数组中?如果是的话,有没有办法实现我想要实现的目标 var currency = "CAD"; var coins = [document.querySelector("#btc"), document.querySelector("#eth"), document.querySelector("#eos"

我的问题是出现“TypeError:无法在updatePrice处将属性'innerText'设置为null”错误。我想知道我的问题是否在选择器数组中?如果是的话,有没有办法实现我想要实现的目标

var currency = "CAD";
var coins = [document.querySelector("#btc"),
            document.querySelector("#eth"),
            document.querySelector("#eos"),
            document.querySelector("#lite")];
var urls = ["https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=CAD",
            "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=CAD",
            "https://min-api.cryptocompare.com/data/price?fsym=EOS&tsyms=CAD",
            "https://min-api.cryptocompare.com/data/price?fsym=LITE&tsyms=CAD"];

window.onload = function loadPrices() {
  setInterval(function() {
      for(var i = 0; i < 4; i++){
        fetch(urls[i])
        .then(handleErrors)
        .then(parseJSON)
        .then(updatePrice, i)
        .catch(displayErrors);
      }
}, 5000);
}

function parseJSON(res) {
  return res.json().then(function(parsedData){
    console.log(parsedData[currency]);
    return parsedData[currency];
  })
}
function updatePrice(data, i){
    console.log(coins[i]);
    coins[i].innerText = data;
 }
function handleErrors(res){
  if(!res.ok){
    throw Error(res.status);
  }
  return res;
}
function displayErrors(err){
    console.log(err);
}

在获取标签之前,标签必须存在

var coins;
window.onload = function loadPrices() {
  coins = [document.querySelector("#btc"),
           document.querySelector("#eth"),
           document.querySelector("#eos"),
           document.querySelector("#lite")];

您应该在for循环和中使用
let
而不是
var

此外,您的
updatePrice
函数未正确传递
i
变量,因此
coins[i]
未定义。一个非常简单的修复方法是传入一个调用另一个函数的函数。因此,改变:

。然后(updatePrice,i)

。然后((数据)=>updatePrice(数据,i))

查看函数的工作方式也可能有用

var currency=“CAD”;
var coins=[document.querySelector(#btc”),
文件查询选择器(“eth”),
文档查询选择器(“eos”),
document.querySelector(“#lite”)];
变量URL=[”https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=CAD",
"https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=CAD",
"https://min-api.cryptocompare.com/data/price?fsym=EOS&tsyms=CAD",
"https://min-api.cryptocompare.com/data/price?fsym=LITE&tsyms=CAD"];
window.onload=函数loadPrices(){
setInterval(函数(){
for(设i=0;i<4;i++){
获取(URL[i])
.然后(handleErrors)
.then(解析JSON)
.然后((数据)=>updatePrice(数据,i))
.catch(显示错误);
}
}, 5000);
}
函数parseJSON(res){
返回res.json().then(函数(parsedData){
log(parsedData[currency]);
返回解析数据[货币];
})
}
函数updatePrice(数据,i){
控制台日志(硬币[i]);
硬币[i].innerHTML=数据;
}
函数句柄错误(res){
如果(!res.ok){
抛出错误(res.status);
}
返回res;
}
函数显示错误(err){
控制台日志(err);
}


我打赌在运行循环时div不存在?直接答案是“是”,但不完全清楚发生了什么。主要问题是这行:
。然后(updatePrice,I)
。变量
i
不会传递给
updatePrice
函数。
var coins;
window.onload = function loadPrices() {
  coins = [document.querySelector("#btc"),
           document.querySelector("#eth"),
           document.querySelector("#eos"),
           document.querySelector("#lite")];