2009-11-06 46 views
0

我的功能清除了一个下拉列表,然后重新填充它。我真的需要这些吗?还是有更简洁的方法来做到这一点?这意味着我需要创建一个新的document.createElement(“选项”);或者有没有捷径?document.createElement的快捷方式(“选项”)?

 for (blah blah blah) 
     { 
      objNewOption = document.createElement("option"); 
objNewOption.value = day; 
objNewOption.text = day; 
birthDay.options.add(objNewOption); 
     } 

回答

1

真的那么长吗?这不是很重要。

如果你想使用框架,如MooToolsPrototype,它们有一个Element类,让你在一行中完成。

​​
0

document.createElement技术的最大问题是它真的很慢。使用框架是最好的,但无论哪种方式,我都会建议构建选项列表并在选择框中设置innerHTML属性。

strOptions = ""; 
for (blah blah blah) 
{ 
    strOptions += '<option value="' + day + '">' + day + '</option>' 
} 
birthDay.innerHTML = strOptions; 

浏览器将能够解析HTML的速度比您能够手动构建这些元素快得多。

为了回应评论,这就是为什么使用平台库永远值得。在YUI3中,我这样做:

var fillSelectbox = function(select, optionList) { 
    var i, option = ''; 
    for (i = 0; i < optionList.length; i += 1) { 
     option += '<option value="' + optionList[i].Value + '" selected="' + (optionList[i].selected ? '"selected"' : '""') + '">' + optionList[i].Text + '</option>'; 
    } 
    select.append(option); 
    select.set('selectedIndex', -1); 
}; 

其中,select是selectNode,optionList是JavaScript数组。

+1

除了在IE(甚至8),不能正确设置SELECT标签的innerHTML。 – seanmonstar 2009-11-06 20:03:36

+1

请解释如何使用框架可以加速DOM操作... – Christoph 2009-11-06 21:22:37

+0

该框架规范了底层浏览器实现中的错误,允许我在Internet Explorer上设置必须更快的innerHTML样式。即使使用平台,构建一个文本字符串而不是大量的选项标签也会更快,这对处理相对较大的数据集非常重要。 – foxxtrot 2009-11-06 21:58:20

2
var new_option_element = new Option(display_label, value, selected_boolean); 
2

创建您自己的快捷...

function x() { return document.createElement("option"); } 

for(blah blah blah) { 
    objNewOption = x(); 
}