javascript - 无法使用node.insertBefore()方法注入(inject)DOM元素

标签 javascript arrays algorithm

我有一个按字母顺序排序的项目列表。这个想法是注入(inject)来自 alphabetArr 的相应字母。 <li> 之后的数组ID 为 DOMElementsArr大批。我做错了什么?

控制台中没有错误,但它不起作用。

数组:

let alphabetArr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
    "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];

let DOMElementsArr = ['8MM', ... ,'Daddy_Day_Care']

这是我的方法:

//create function that injects new element
function insertAfter(el, referenceNode) {
  referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);
}

//function that loops through both arrays
function injectAllAlphabetLetters(){

  //Create new element
  let newEl = document.createElement('li');
  newEl.className = 'titles alphabet';

  for (let i = 0; i < alphabetArr.length; i++){
  console.log(alphabetArr[i]);
  newEl.innerHTML = alphabetArr[i][0];
  }

  let ref; 

  for (let j = 0; j < DOMElementsArr.length; j++){
    console.log(DOMElementsArr[j]);
    ref = document.getElementById(DOMElementsArr[j]);
  }

  insertAfter(newEl, ref);
}

injectAllAlphabetLetters();

最佳答案

在当前代码中,您只需创建一个元素,然后迭代并更新其内容,然后在下一个循环中获取元素,最后仅使用最后一个值调用 insertAfter 函数一次。

要使其正常工作,您必须组合两个循环,然后将插入代码移动到循环中。

//create function that injects new element
function insertAfter(el, referenceNode) {
  referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);
}

//function that loops through both arrays
function injectAllAlphabetLetters() {
  // iterate until last element of minimum length array(to avoid problem in case array length are different)
  for (let i = 0; i < alphabetArr.length && i < DOMElementsArr.length; i++) {    
    //Create new element and set properties
    let newEl = document.createElement('li');
    newEl.className = 'titles alphabet';    
    newEl.innerHTML = alphabetArr[i][0];

    // get the element based on id
    let ref = document.getElementById(DOMElementsArr[i]);    
    // call function to insert
    insertAfter(newEl, ref);
  }

}

injectAllAlphabetLetters();

关于javascript - 无法使用node.insertBefore()方法注入(inject)DOM元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55334669/

相关文章:

javascript - 空白函数产生 "object expected"错误

javascript - 用内联 html 替换字符串

java - 如何删除相同的单词?

python - 对两个数组进行排序以查看它们是否具有相同的值,但它只会发现数组中有 2/3 的值相同

algorithm - 具有最多不同数字算法的子方形

javascript - 从 jquery 范围调用到类函数

javascript - 如何根据数据d3js设置初始确定的缩放级别

java - 检查字符串中的单词是否在数组中

javascript - 以函数式方式向 js 对象添加字段

algorithm - 动态规划 - "maximize"矩阵链乘法