我一直盯着这几个小时,可以真正使用一些帮助。我正在使用电影院网站的一些现有代码,以下内容应填写一个选择列表,其日期范围从今天到xml文件的最大日期。
function populateSelect(xmlDoc, elSel) {
var dmindate = new Date();
var showings = xmlDoc.getElementsByTagName('Session');
fmaxdate = "";
for (var showing = 0; showing < showings.length; showing++) {
if (retText(showings[showing].getElementsByTagName('Date_time')[0]) > fmaxdate) {
fmaxdate=retText(showings[showing].getElementsByTagName('Date_time')[0]);//get the Max Date
}
}
var dmaxdate = new Date.parseString(fmaxdate, "yyyyMMddHHmmss");
while(dmindate <= dmaxdate){ //Fill in the Select List
var elOptNew = document.createElement('option');
elOptNew.text = dmindate.format("EE NNN d, yyyy");
elOptNew.value = dmindate.format("MM/dd/yyyy");
dmindate.setDate(dmindate.getDate()+1);
try {
elSel.add(elOptNew, null); // standards compliant doesn't work in IE
}
catch(ex) {
elSel.add(elOptNew); // IE only
}
}
}
这在FF,Chrome和Safari中完全正常,但IE8不会显示日期下拉列表,并且显示无效参数与尝试的结束括号相同。
非常感谢任何帮助!
答案 0 :(得分:1)
我不知道Date.prototype.parseString
或format
方法的来源,可能是您添加了一些日期库。它们不是ECMAScript ed 3或5的一部分。
您可以替换这些行:
> var elOptNew = document.createElement('option');
> elOptNew.text =dmindate.format("EE NNN d, yyyy");
> elOptNew.value = dmindate.format("MM/dd/yyyy");
使用:
var elOptNew = new Option(dmindate.format("EE NNN d, yyyy"), // option text
dmindate.format("MM/dd/yyyy")); // option value
然后将其添加到选择:
elSel.appendChild(elOptNew);
以上内容适用于所有版本的IE和其他浏览器。有关Option构造函数的详细信息,请参阅http://dev.w3.org/html5/spec/single-page.html#the-option-element。
在add method的DOM 2 HTML规范中,它说:
此方法相当于Node的appendChild方法 如果before参数为null,则为interface。
这并不意味着传递ECMAScript null
对象,它意味着“如果没有第二个参数”。规范是语言中立的,它不是特定于JavaScript的。 HTML5 OptionsCollection add method是相同的(即“null”表示没有参数,不是javascript null
对象)。
答案 1 :(得分:0)
从documentation I could find开始,具有空参数并没有任何意义。但是,很明显,不同浏览器中的JavaScript引擎以不同方式处理此方法,并且IE不喜欢null
作为第二个参数。
所以,根据口头禅,you should use jQuery. It is good and does all things.它确实有助于保护您免受DOM的浏览器实现之间的差异,因为它具有fairly broad compatibility。无论如何它修复了this guy's issue。
您可能希望使用append()
代替add()
。例如:
var elOptNew = $('<option></option>');
...
elSel.append(elOptNew);
答案 2 :(得分:0)
答案 3 :(得分:0)
还有一种方法可以将新选项添加到选择中,即
var opts = elSel.options;
opts[opts.length] = new Option(dmindate.format("EE NNN d, yyyy"), dmindate.format("MM/dd/yyyy"));