Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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 通过getElementsByTagName为HTML选择元素使用indexOf_Javascript_Dom_Indexof_Getelementsbytagname - Fatal编程技术网

Javascript 通过getElementsByTagName为HTML选择元素使用indexOf

Javascript 通过getElementsByTagName为HTML选择元素使用indexOf,javascript,dom,indexof,getelementsbytagname,Javascript,Dom,Indexof,Getelementsbytagname,试图从数组中删除选定项中显示的项。这是我的建议 var allProbs=[];//这在别处有定义 var-dropProbs=[]; var j; var sel=document.getElementsByTagName(“选择”) var selarray=Array.prototype.slice.call(sel);//将节点列表转换为数组 对于(j=0;j>0; var thisArg=参数[1]; var值; 对于(变量i=0;i

试图从数组中删除选定项中显示的项。这是我的建议

var allProbs=[];//这在别处有定义
var-dropProbs=[];
var j;
var sel=document.getElementsByTagName(“选择”)
var selarray=Array.prototype.slice.call(sel);//将节点列表转换为数组
对于(j=0;j
在对要比较的值调用toString后执行严格的相等。在处理主机(DOM)对象时,调用它们的toString方法(如果它们有)的结果取决于实现

您是否尝试过:

console.log(typeof selarray[j].toString);
如果该函数的结果是,调用它可能会返回如下结果:

"[object HTMLSelectElement]"
var index;
for (var j = 0; j < allProbs.length; j++) {
  index = selarray.findIndex(function(sel) {
    return sel.value == allProbs[j];
  })

  /* do stuff based on value of index */

}

或者其他浏览器开发者认为是个好主意的东西。但它可能会为selarray的每个成员返回相同的值

您没有显示AllProb的值是什么,但是除非它们与
selarray[j].toString()
返回的字符串完全匹配,否则您将得到
-1
,如果它确实匹配,您将始终得到
0
(即第一个)

编辑 因此,基于allProbs中的值是字符串,您将永远无法获得匹配,因为您正在有效地查找以下位置:

allProbs[i] === selarray[j].toString(); 
其中selarray[j].toString()始终返回上述值之一(或其他值)

您可以使用(ECMAScript 2015中的新方法,因此可能需要一个),它类似于indexOf,但使用一个函数来确定匹配

假设您正试图找到一个值等于allProbs成员的select元素,因此您可能需要以下内容:

"[object HTMLSelectElement]"
var index;
for (var j = 0; j < allProbs.length; j++) {
  index = selarray.findIndex(function(sel) {
    return sel.value == allProbs[j];
  })

  /* do stuff based on value of index */

}
var指数;
对于(var j=0;j
下面是一个工作示例:

//Array.prototype.findIndex的Polyfill
if(!Array.prototype.findIndex){
Array.prototype.findIndex=函数(谓词){
if(this==null){
抛出新的TypeError('Array.prototype.findIndex调用为null或未定义');
}
if(类型谓词!=='function'){
抛出新类型错误('谓词必须是函数');
}
变量列表=对象(此);
var length=list.length>>>0;
var thisArg=参数[1];
var值;
对于(变量i=0;idropProbs:'+JSON.stringify(dropProbs))

aaa

这是一个易于调试的代码,您在创建selarray后是否尝试过检查它?看到里面是什么了吗?所以你很惊讶,
allProbs
中没有一项是
select
元素。但是您没有在
allProbs
中提供项目。那么我们就无能为力了。thx Saar:added:alert(selarray[0]);这显示了带有[object HTMLSelectElement]的pop,因此我解释为selarray没有像预期的那样使用sel制作数组???我不理解下面的投票人。OP在理解一些代码时遇到了问题,这正是这个网站的目的,为什么要记下来呢?我在控制台中得到了“字符串”。我添加了一个JSFIDLE来简化讨论。顺便说一句,我对polyfill不太满意,它只是MDN上的一个,工作正常,但似乎没有完全实现ECMA-262算法。