javascript - 我如何编写一个函数,如果它的参数是一个 Node 集合,则对 javascript 中的所有 Node 元素执行?

标签 javascript html css node.js

非常困惑,如何提出这个问题(特别是,对英语只有一半知识)。 所以我想做的是,编写一个函数来检测它的参数是单个 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/

相关文章:

javascript - 在 jQuery Mobile 中制作自定义背景图片

javascript - 动态重新加载src

javascript - IE 中的手感宽度和高度

html - 检索异步内容之前的 Bootstrap 容器最小高度

javascript - 是否有等效于属性的 __noSuchMethod__ 功能,或在 JS 中实现它的方法?

javascript - 无法使用 JavaScript 添加表格行

javascript - 如何使用 Google map API 进行搜索?

jquery - 刷新和缩表头

javascript - 对于本地模块,Grunt 失败并显示 "Cannot find module"

javascript - 对象和文件上传字段未显示