为什么我不能为div设置值?

时间:2015-07-10 00:53:07

标签: javascript html

我想为div设置值,我尝试了很多方法但是所有这些都没有用。 我认为语法是正确的,因为我进行了大量的研究               

.flip3d2{width:100px;height:100px;margin:10px; float:left;}
.flip3d2  .front{
position:absolute;
-webkit-transform:perspective(600px) rotateY(0degdeg);
transform: perspective(600px) rotateY(0deg);
background:#fc0;width:100px;height:100px;border-radius:7px;
-webkit-backface-visibility:hidden;
backface-visibility:hidden;
transition:-webkit-transform .5s linear 0s;
transition:transform .5s linear 0s;
}

.flip3d2  .back{
position:absolute;
-webkit-transform:perspective(600px) rotateY(180deg);
transform: perspective (600px) rotateY(180deg);
background:#80bfff;width:100px;height:100px;border-radius:7px;
-webkit-backface-visibility:hidden;
backface-visibility:hidden;
transition:-webkit-transform .5s linear 0s;
transition:transform .5s linear 0s;
}

.flip3d2:hover  .front
{
-webkit-transform:perspective(600px) rotateY(-180deg);
transform:perspective(600px) rotateY(-180deg);
}

.flip3d2:hover  .back
{
-webkit-transform:perspective(600px) rotateY(0deg);
transform:perspective(600px) rotateY(0deg);
}
</style>

<script>


var list = document.getElementsByClassName("mainwindow");
var list2=list.getElementsByClassName("flip3d2");
list2.getElementsByClassName("front").value = "red";
    list2.getElementsByClassName("front").text = "red";
list2.getElementsByClassName("front").innerHTML = "red";
</script>
</head>
<body>
<div class="mainwindow">
<div class="flip3d2">
<div class="back"> box 2 - back</div>
<div class="front"> box 2 - front</div>

</div>
</div>
</body>
</html>

尝试了三种方法来设置div的值,但没有人工作。

3 个答案:

答案 0 :(得分:1)

getElementsByClassName返回一个HTMLcollection(它是一个类似于object的数组,可以包含多个元素)对象,而不是直接的dom引用,因此它没有像innerHTML这样的属性。

如果你确定只有1个元素,那么你可以使用索引访问dom引用,否则你可以遍历集合并设置内容。

var list = document.getElementsByClassName("mainwindow")[0];
var list2 = list.getElementsByClassName("flip3d2")[0];
list2.getElementsByClassName("front")[0].innerHTML = "red";

//to loop
//var els = list2.getElementsByClassName("front");
//for(var i = 0; i <  els.length; i++){
//  els[i].innerHTML = 'something'
//}
.flip3d2 {
  width: 100px;
  height: 100px;
  margin: 10px;
  float: left;
}
.flip3d2 .front {
  position: absolute;
  -webkit-transform: perspective(600px) rotateY(0degdeg);
  transform: perspective(600px) rotateY(0deg);
  background: #fc0;
  width: 100px;
  height: 100px;
  border-radius: 7px;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  transition: -webkit-transform .5s linear 0s;
  transition: transform .5s linear 0s;
}
.flip3d2 .back {
  position: absolute;
  -webkit-transform: perspective(600px) rotateY(180deg);
  transform: perspective (600px) rotateY(180deg);
  background: #80bfff;
  width: 100px;
  height: 100px;
  border-radius: 7px;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  transition: -webkit-transform .5s linear 0s;
  transition: transform .5s linear 0s;
}
.flip3d2:hover .front {
  -webkit-transform: perspective(600px) rotateY(-180deg);
  transform: perspective(600px) rotateY(-180deg);
}
.flip3d2:hover .back {
  -webkit-transform: perspective(600px) rotateY(0deg);
  transform: perspective(600px) rotateY(0deg);
}
<div class="mainwindow">
  <div class="flip3d2">
    <div class="back">box 2 - back</div>
    <div class="front">box 2 - front</div>
  </div>
</div>

答案 1 :(得分:0)

直到class属性不需要是uniq,当你从中查询元素时,你将获得一个元素数组,注意getElementsByClassName中的“s”。

document.getElementsByClassName("front")[0].innerHTML = "red";

答案 2 :(得分:0)

您的代码存在一些问题。正如Arun P Johny的回答所提到的,getElementsByClassName返回HTMLCollectionarray-like object,而不是DOM节点。您会注意到getElement s ByClassName中的 s ,其中包含元素 s 的任何DOM方法都会返回HTMLCollection。像getElementById(没有 s )这样的方法会返回单个DOM节点。

如果你习惯使用jQuery,jQuery提供了一个类似于数组的对象,它有一些方法可以操作整个集合,这可能就是为什么你会觉得你可以用DOM方法返回的集合做到这一点,但遗憾的是,您无法使用HTMLCollection s。

由于HTMLCollection类似于数组,因此您可以使用括号表示法访问其元素:

var list = document.getElementsByClassName("mainwindow")[0];
var list2 = list.getElementsByClassName("flip3d2")[0];
list2.getElementsByClassName("front")[0].textContent = "red";

或者您可以使用querySelector,它将返回基于CSS选择器的单个DOM元素:

var list = document.querySelector(".mainwindow");
var list2 = list.querySelector(".flip3d2");
list2.querySelector(".front").textContent = "red";

或者如果您不需要.mainwindow的引用,您可以这样做:

var list2 = document.querySelector(".mainwindow .flip3d2");

或者,如果您不需要引用.mainwindow.flip3d2来进行其他事情,您可以这样做:

document.querySelector(".mainwindow .flip3d2 .front").textContent = "red"

您的代码的另一个问题是脚本标记位于您尝试访问的元素的HTML标记之上。在您致电getElementsByClassName时,这些元素不存在,因此您会获得一个空的HTMLCollection对象。移动<script>标记下方的<div>标记即可解决此问题。最好将脚本放在尽可能低的页面中,这有助于避免very common error以及improves the performance of your page

其他一些事情,

  • HTMLDivElement没有.value属性,设置它没有任何意义(尽管它会创建expando property

  • div没有.text属性,您可能正在寻找.textContent

  • 同时使用.textContent.innerHTML是多余的。 .textContent将设置元素的文本,然后.innerHTML将立即覆盖它。如果您设置的是纯文本而没有任何标记,请使用.textContent。如果您从可靠的来源注入HTML(不是用户提供的,最多可以打开XSS attacks),您可以使用.innerHTML