JavaScript只用一个类检索div元素的唯一“id”?

时间:2014-03-27 09:01:22

标签: javascript html

在制作JavaScript脚本以迭代具有相同类名的一组元素时,您可以单独更改其每个属性。

如果脚本没有唯一ID,脚本如何知道要编辑哪个元素?如果他们确实有唯一的ID,你如何检索它们?使用alert();从简单的document.getElementsByClassName('');显示节点数组中的内容似乎显示元素的类型。

我真的可以将这些结果存储在一个数组中供以后使用吗?

如果在文档加载时,我获取具有某个类名的元素数组:

<script>

var buttonArray = document.getElementsByClassName('button');

</script>

然后迭代这个,并将结果在'r'位置添加到一个对象:

<script>

var buttonArray = document.getElementsByClassName('button');
var buttonObject = {};

for(r=0;r<buttonArray.length;r+=1)
{
     buttonObject[buttonArray[r]] = [r*5,r*5,r*5];
}

</script>

我是否可以使用类名“按钮”找到每个单独元素的数组,如下所示:

<script>

var buttonArray = document.getElementsByClassName('button');
var buttonObject = {};

function changeCol(buttonID)
{
     var red = buttonObject[buttonID][0];
     var green = buttonObject[buttonID][1];
     var green = buttonObject[buttonID][2];
     buttonID.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
}

for(r=0;r<buttonArray.length;r+=1)
{
     buttonObject[buttonArray[r]] = [r*5,r*5,r*5];
     buttonArray[r].onclick = function(){ changeCol(this); };
}

</script>

我认为this的{​​{1}}部分将保存与存储在buttonObject对象中的唯一ID,作为保存数组的变量名称?

这应该有用吗?我似乎无法在我的网页上找到它,所以相反,我使用buttonObject中的按钮innerHTML作为保存该对象的数组的变量名。问题是,我可能需要两个或更多按钮才能拥有相同的innerHTML。

这是目前的网页: http://www.shadespeed.com

我需要重新制作脚本以允许按钮具有相同的名称。

非常感谢任何提示/建议。

非常感谢!

- 丹。 :)

1 个答案:

答案 0 :(得分:1)

假设我的桌子上有一副牌,面朝上。我想翻看所有红色的。我可能会这样做:

desk.getCardsByColour("red").forEach(flipit);
// note, obviously not real JavaScript for a not real situation :p

所以我扫描我的卡片,发现所有的红色卡片。然后我把它们翻过来。您要问的基本上是“如果没有唯一ID,我怎么知道翻转哪些卡?”那么,我是否需要一个ID来迭代一组对象,在这种情况下是一组卡片?当然不是。

(请注意,虽然卡片中的卡在其内容中具有唯一属性,但我们假设这是元素的内容而不是id属性,kay?)

现在,这就是我如何做你正在做的事情:

for( r=0; r<buttonArray.length; r++) {
  buttonArray[r].buttonObject = [r*5,r*5,r*5];
  buttonArray[r].onclick = changeCol;
}
function changeCol(button) {
  var red   = button.buttonObject[0];
  var green = button.buttonObject[1];
  var blue  = button.buttonObject[2];
  button.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
}