为什么在SELECT属性周围放一个DIV会很麻烦呢?
Putting a DIV around a SELECT attribute is equal to trouble, why?
我是一个javascript学习者。我有一个小脚本,几乎完成。我只想在html select属性周围加上DIV。如果我这样做,我的脚本将无法工作。为什么?这是被禁止的吗?
http://jsfiddle.net/triggerload/XHWwg/159/ <div id="test">
<select class="valueList" name="n1">
<option selected value="0"></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
</div>
这个问题几乎肯定与您试图获取select
元素的方式有关:
function grabFormSelects(parent, class_name)
{
//make new array to hold nodes
var nodes = [];
for(var i=0;i<parent.childNodes.length;i++)
{
var node = parent.childNodes[i];
//filter out any node that isn't an element node and doesn't have the class name we're looking for
if(node.nodeType === 1 && node.className === class_name)
{
nodes.push(node);
}
}
return nodes;
}
您只检查question_holder
的直接子节点,但是当您添加div
时,select
元素不再是question_holder
的直接子节点,它是您添加的div
的子节点。所以它当然不会被你的grabFormSelect()
代码返回。
作为快速修复,您可以尝试:
function isDescendent(node, parent) {
//see if any of the nodes ancestors match the specified parent node
while (node.parentNode && node.parentNode != parent) {
node = node.parentNode;
}
return node.parentNode == parent;
}
function grabFormSelects(parent, class_name)
{
//make new array to hold nodes
var nodes = [];
var selects = document.getElementsByTagName("select");
for(var i=0;i<selects.length;i++)
{
var node = selects[i];
//filter out any node that isn't an element node and doesn't have the class name we're looking for
if(node.nodeType === 1 && node.className === class_name && isDescendent(node, parent))
{
nodes.push(node);
}
}
return nodes;
}
我认为这是因为父母不再是question_holder。它现在是div的id。
function addListeners()
{
var holder = document.getElementById("question_holder");
var selects = grabFormSelects(holder, "valueList");
var holder2 = document.getElementById("question_holder2");
var selects2 = grabFormSelects(holder2, "valueList2");
for(var i=0;i<selects.length;i++)
{
selects[i].onchange = checkTarget;
}
for(var i=0;i<selects2.length;i++)
{
selects2[i].onchange = checkTarget2;
}
}
function grabFormSelects(parent, class_name)
{
//make new a
所以holder现在应该调用document.getElementById("test")
相关文章:
- 通过DRAGGABLE将一个DIV移动到另一个DIF下?(CSS,JQuery)
- 下载Div&画布为一个图像
- DIV怎么能像Javascript中的另一个元素一样工作呢
- 限制一个DIV出现在另一个特定大小的DIV中
- 使用jQuery将DIV放在另一个DIV上
- 点击一个按钮,有没有一种方法可以检查Div内部的图像
- 使用YUI或ExtJS将隐藏的DIV变成一个窗口
- 只翻转一个DIV,而不是所有DIV都属于同一类
- 更改另一个 DIV 之前的 DIV 宽度
- JQuery 将一个 Div 值的百分比添加到另一个值
- jQuery - 在另一个 DIV 中定位特定的 DIV
- 选中复选框时仅重新加载一个DIV
- 动态创建一个DIV容器
- jQuery-检查外部页面上是否存在DIV,如果存在,则加载DIV,否则加载另一个
- 在悬停时显示一个DIV,在悬停的另一个DIV.使用CSS
- 将DIV内容复制到另一个DIV
- 当调用DIV时,将一个DIV加载到另一个的顶部
- 通过点击隐藏DIV,并通过JavaScript显示另一个DIV
- 动态添加图像在DIV一个接一个
- 给DIV一个最大化按钮