非常困惑,如何提出这个问题(特别是,对英语只有一半知识)。 所以我想做的是,编写一个函数来检测它的参数是单个 Node 还是 Node 集合,并根据此获取 Node/Node 的数据。但展示比描述更容易。 (解释在代码中的注释中)我也想为英语和 javascript 中的语言错误以及对我的问题的冗长解释表示歉意。
var e, eH;
function x(y){
e = y;
eH = e.offsetHeight;
};
var ps = document.querySelectorAll("p");
x(ps);
e.style.top = `${eH}px`;
举个例子,我想设置top style属性为元素的高度,但是ps是一个 Node 集合。
var e, eH, i = 0;
function x(y){
e = y;
eH = e.offsetHeight;
howmany(e)
};
function howmany(z){
e = z;
if (e[i] !== undefined){
for (i; i<e.length; i++){
e = e[i]
}
};
var ps = document.querySelectorAll("p");
x(ps);
e.style.top = `${eH}px`;
var i,a;
function fun(e){
i = 0;
a = e;
if (e[i] === undefined){
a+=1
}
else{
for (i; i<e.length; i++){
a[i]+=1;
}
}
};
var x = [1,2,3,4,5];
fun(x);
var e, eH, i = 0;
function x(y, whattodo){
e = y;
eH = e.offsetHeight;
c = whattodo
howmany(e, c)
};
function howmany(z, v){
e = z;
if (e[i] !== undefined){
for (i; i<e.length; i++){
e[i].v
}
};
var ps = document.querySelectorAll("p"),
var wtd = style.top = `${eH}px`;
x(ps, wtd);
如果我的目标是在一个或多个元素上特别设置一个属性,那就太好了,但这不是我的目标。 我的目标是,当我使用 Node 集合调用该函数时,我不能“控制”集合中的一个元素,也不能“控制”集合中的每个元素,而是集合中的每个元素。 因为我认为不可能这样描述我的问题,所以让我举一个真实的例子。我会展示我的代码:
var elem, celElem, elemTop, elemMag, elemBot, elemCent, winTop, winMag, winBot, winCent;
function getElem(el, cEl){
elem = el,
celElem = cEl,
elemTop = 0,
elemMag = elem.offsetHeight,
elemBot = elemTop+elemMag,
elemCent = elemTop+(elemMag/2),
winTop = window.pageYOffset,
winMag = window.innerHeight,
winBot = winTop+winMag,
winCent = winTop+(winMag/2),
if (celElem === undefined){celElem = elem};
topMag(elem);
};
function topMag(x){
elem = x;
if (getComputedStyle(elem).position === "fixed"){
elemTop = elem.offsetTop;
}
else{
do{
elemTop += elem.offsetTop;
elem = elem.offsetParent;
}
while(elem != "[object HTMLBodyElement]");
elem = x;
}
};
var targetElem = document.querySelectorAll("p");
var nagyElemCent = -Math.abs((winCent-elemCent)/((elemMag+winMag)/2))+1;
getElem(targetElem);
elem.style.opacity = nagyElemCent;
我希望这个例子能更好地描述我的问题。我想要的是,当我在最后一行代码中设置 elem 时,elem 表示所有段落。我有许多像 nagyElemCent 这样的预编码数字,但大多数时候需要修改它们才能获得我想要的。
最佳答案
要知道一个值是 Node 还是 Node 集合,您可以检查它是否具有 length
属性。
在函数内部,如果你检查并收到了一个 Node ,把那个 Node 变成一个数组并以这种方式进行操作,所以你只需要检查一次它是否是一个数组,而不必为函数的其余部分担心它。
function doSomething(nodes) {
if (!('length' in nodes)) {
nodes = [nodes]
}
nodes.forEach(node => {
// do something w/ each node
})
}
关于javascript - 我如何编写一个函数,如果它的参数是一个 Node 集合,则对 javascript 中的所有 Node 元素执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48968032/