問題幾乎肯定與你正在試圖抓住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;
}
似乎是工作的罰款,我...你將有更具體一點。 – Justin 2011-04-11 04:32:29
來自W3學校: 注:瀏覽器通常在div元素前後放置換行符。 – 2011-04-11 04:36:24
@Acolyte不是一個換行符,只是元素具有* block *顯示,因此默認情況下會消耗所有的水平空間。 – alex 2011-04-11 04:44:43