gpt4 book ai didi

javascript - 不想运行的 for 循环

转载 作者:行者123 更新时间:2023-11-28 21:20:14 26 4
gpt4 key购买 nike

我有这个代码:

<script type="text/javascript">
var url = "http://www.xxxxx.xxx/xxxxxxxxx";

var txt;
var id1;
var id2;
var imgarres = [];
var imgarr = [];
var imgels = [];

function getdata() {
if (id1){clearTimeout(id1);}
if (id2){clearTimeout(id2);}

var xhr = new XMLHttpRequest();
xhr.open('GET',url, true);
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.setRequestHeader('Pragma', 'no-cache');

xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
txt = xhr.responseText;

var r = txt.indexOf('<b class="fl_r">Online</b>');
var el = document.createElement("div");

el.innerHTML = txt;

var n = imgprocess(el);
var nam = el.getElementsByTagName("title")[0].innerHTML;

if (r != -1) {
var notification = webkitNotifications.createNotification('plus.gif', nam, 'online!!' );
notification.show();
var id1 = setTimeout(getdata, 60000);
} else {
var notification = webkitNotifications.createNotification(n, nam, 'offline!!' );
notification.show();
var id2 = setTimeout(getdata, 600000);
}
}
}

xhr.send();
}

function imgprocess(text) {
imgels = text.getElementsByTagName("IMG");
for (var i=0;i< imgels.length;i++) {
if (imgels[i].src.indexOf(parse(url)) != -1) {
imgarr = imgels[i];
}
}

for (var p=0; p< imgarr.length; p++) {
if (imgarr[p].parentNode.nodeName=="A") {
imgarres = imgarr[p];
}
}

var z = imgarres[0].src;
return z;
}

function init() {
getdata();
}
</script>
</head>
<body onload="init();">

当我执行此代码时,错误提示“无法读取未定义的 src”关于 var z = imgarres[0].src;当我删除src时从这一行开始,扩展工作没有错误,但是 imgprocess例程没有返回预期值!预期值是 imgurl,它位于我删除的 src 中。似乎第二个 for 循环( for (var p=0; p< imgarr.length; p++){ )根本没有运行,但第一个循环没问题。我该如何解决这个问题?

P.S.:我尝试像这样传递回调:xhr.onreadystatechange = function(imgprocess) {但它不起作用。它说“未捕获的类型错误”对象不是一个函数。

最佳答案

 if (imgels[i].src.indexOf(parse(url)) != -1){
imgarr = imgels[i];
}

看起来您正在用上面代码中的单个元素覆盖数组。

添加编辑:

如果 if 条件为 true,则 imgels[i] 是一个元素(带有 src),但不是将 imgels[i] 添加到 imgarr 数组,您正在将 imgarr 更改为指向单个元素。

然后在第二个 for 循环中,您将其视为数组。

其实这也是第二次循环的错误。 imgarres 是否应该是一个数组?如果是,那么 imgarres = imgarr[p]; 是错误的(这样做后它指向一个元素)。如果不是,则 var z = imgarres[0].src; 是错误的(如果它是一个元素,则不需要 [0])。

添加编辑:

somearray = someelement; 

不将元素添加到数组中!

somearray.push(someelement);

是的。

添加了编辑:只需尝试这个即可。谁知道呢,它可能会起作用...

function imgprocess(text){
// get all IMG elements below the div
imgels = text.getElementsByTagName("IMG");
// filter them somehow
imgarr = [];
for (var i=0;i< imgels.length;i++){
if (imgels[i].src.indexOf(parse(url)) != -1){
imgarr.push(imgels[i]);
}
}

// filter again, could probably be joined into one loop
imgarres = [];
for (var p=0; p< imgarr.length; p++){
if (imgarr[p].parentNode.nodeName=="A"){
imgarres.push(imgarr[p]);
}
}
// return the first image's src if any
if (imgarres.length > 0) {
return imgarres[0].src;
}
return null;
}

关于javascript - 不想运行的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com