如何避免重复输入创建节点和追加节点的方法?
How do I avoid repeatedly typing methods that create nodes and append nodes?
我已经研究了我的问题,但没有想出任何东西。我可能缺少与问题相关的正确流行语...
我在对象内部有一个创建 p 元素然后将它们附加到无序列表的方法,它工作正常,但我无法弄清楚如何通过不重复输入来清理我的代码 document.createElement('p') 或重复输入 node.appendChild('p') 方法。
注意:我省略了一些可以显示功能的代码部分,但我认为我的问题仍然可以说明这一点。
当我输入我的代码时,我要么最终得到多个持有 document.createElement('p') 的变量,正如您在 pEl1、pEl2 和 PEl3 中看到的那样。
var totalCompletedTodos = 0,
totalRemainingTodos = 0,
todosUl = document.querySelector('ul'),
todosLi = todosUl.appendChild(document.createElement('li')),
pEl1 = document.createElement('p'),
pEl2 = document.createElement('p'),
pEl3 = document.createElement('p');
todosLi.appendChild(pEl1).textContent = "Toggle All ";
todosLi.appendChild(pEl2).textContent = "Completed: ";
todosLi.appendChild(pEl3).textContent = "Remaining: ";
todosLi.className = 'liInfoBar';
document.querySelector('.liInfoBar > p').className = "toggleAllButton";
或者我最终连续写出多个
todosLi.appendChild(document.createElement('p')).textContent = "string";
var totalCompletedTodos = 0,
totalRemainingTodos = 0,
todosUl = document.querySelector('ul'),
todosLi = todosUl.appendChild(document.createElement('li'));
todosLi.appendChild(document.createElement('p')).textContent = "Toggle All";
todosLi.appendChild(document.createElement('p')).textContent = "Completed: ";
todosLi.appendChild(document.createElement('p')).textContent = "Remaining: ";
todosLi.className = 'liInfoBar';
document.querySelector('.liInfoBar > p').className = "toggleAllButton";
再次:
我不是在寻求功能方面的帮助,而是在寻求有关如何生成可重用代码以使其最小化的帮助。作为初学者,我正在努力投入时间来生成最少的、干净的、可读的代码以及生成功能,这就是我问这个问题的原因。
可能没有我正在寻找的答案,唯一的方法是不断地把它写出来,但我发现自己在整个剧本中做了很多,我觉得必须有一个方法。
免责声明:这是我在 Whosebug 上的第一个 post 希望我的问题措辞易于理解。如果没有,我也会接受关于正确提问的主题的反馈。
谢谢!
为了减少重复,创建一个函数,您可以将 parent、创建的节点的类型以及您需要的任何其他属性传递给该函数。例如:
const append = (
parent,
childType,
otherProps
) => {
const child = parent.appendChild(document.createElement(childType));
if (otherProps) Object.assign(child, otherProps);
return child;
};
const ul = document.querySelector('ul');
const li = append(ul, 'li', { className: 'liInfoBar' });
append(li, 'p', { textContent: 'Toggle All' });
append(li, 'p', { textContent: 'Completed' });
append(li, 'p', { textContent: 'Remaining' });
.liInfoBar {
background-color: yellow;
}
<ul></ul>
或者您也可以使用执行此类操作的库之一。 (但是你确定你希望 p
s 成为 li
的 children 吗?实际上,它看起来有点奇怪)
当你需要对多条数据做同样的事情时,就是循环的时候了!
const paragraphs = [
'Toggle All',
'Completed: ',
'Remaining: '
];
paragraphs.forEach((text) => {
todosLi.appendChild(document.createElement('p')).textContent = text;
});
我已经研究了我的问题,但没有想出任何东西。我可能缺少与问题相关的正确流行语...
我在对象内部有一个创建 p 元素然后将它们附加到无序列表的方法,它工作正常,但我无法弄清楚如何通过不重复输入来清理我的代码 document.createElement('p') 或重复输入 node.appendChild('p') 方法。
注意:我省略了一些可以显示功能的代码部分,但我认为我的问题仍然可以说明这一点。
当我输入我的代码时,我要么最终得到多个持有 document.createElement('p') 的变量,正如您在 pEl1、pEl2 和 PEl3 中看到的那样。
var totalCompletedTodos = 0,
totalRemainingTodos = 0,
todosUl = document.querySelector('ul'),
todosLi = todosUl.appendChild(document.createElement('li')),
pEl1 = document.createElement('p'),
pEl2 = document.createElement('p'),
pEl3 = document.createElement('p');
todosLi.appendChild(pEl1).textContent = "Toggle All ";
todosLi.appendChild(pEl2).textContent = "Completed: ";
todosLi.appendChild(pEl3).textContent = "Remaining: ";
todosLi.className = 'liInfoBar';
document.querySelector('.liInfoBar > p').className = "toggleAllButton";
或者我最终连续写出多个 todosLi.appendChild(document.createElement('p')).textContent = "string";
var totalCompletedTodos = 0,
totalRemainingTodos = 0,
todosUl = document.querySelector('ul'),
todosLi = todosUl.appendChild(document.createElement('li'));
todosLi.appendChild(document.createElement('p')).textContent = "Toggle All";
todosLi.appendChild(document.createElement('p')).textContent = "Completed: ";
todosLi.appendChild(document.createElement('p')).textContent = "Remaining: ";
todosLi.className = 'liInfoBar';
document.querySelector('.liInfoBar > p').className = "toggleAllButton";
再次: 我不是在寻求功能方面的帮助,而是在寻求有关如何生成可重用代码以使其最小化的帮助。作为初学者,我正在努力投入时间来生成最少的、干净的、可读的代码以及生成功能,这就是我问这个问题的原因。
可能没有我正在寻找的答案,唯一的方法是不断地把它写出来,但我发现自己在整个剧本中做了很多,我觉得必须有一个方法。
免责声明:这是我在 Whosebug 上的第一个 post 希望我的问题措辞易于理解。如果没有,我也会接受关于正确提问的主题的反馈。
谢谢!
为了减少重复,创建一个函数,您可以将 parent、创建的节点的类型以及您需要的任何其他属性传递给该函数。例如:
const append = (
parent,
childType,
otherProps
) => {
const child = parent.appendChild(document.createElement(childType));
if (otherProps) Object.assign(child, otherProps);
return child;
};
const ul = document.querySelector('ul');
const li = append(ul, 'li', { className: 'liInfoBar' });
append(li, 'p', { textContent: 'Toggle All' });
append(li, 'p', { textContent: 'Completed' });
append(li, 'p', { textContent: 'Remaining' });
.liInfoBar {
background-color: yellow;
}
<ul></ul>
或者您也可以使用执行此类操作的库之一。 (但是你确定你希望 p
s 成为 li
的 children 吗?实际上,它看起来有点奇怪)
当你需要对多条数据做同样的事情时,就是循环的时候了!
const paragraphs = [
'Toggle All',
'Completed: ',
'Remaining: '
];
paragraphs.forEach((text) => {
todosLi.appendChild(document.createElement('p')).textContent = text;
});