2

我已经盯着这个几个小时了,真的可以使用一些帮助。我正在使用电影院网站的一些现有代码,以下内容应填写一个选择列表,其中包含从今天到 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 不显示带有日期的下拉列表,并且它显示 Invalid Argument 与 try 的右括号在同一行。

任何帮助将不胜感激!

4

4 回答 4

1

我不知道来自哪里Date.prototype.parseStringformat方法来自哪里,想必您正在添加一些日期库。它们不是 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 方法的 DOM 2 HTML 规范中,它说:

如果 before 参数为 null,则此方法等效于 Node 接口的 appendChild 方法。

这并不意味着传递 ECMAScriptnull对象,它意味着“如果没有第二个参数”。该规范是语言中立的,它不是特定于 javascript 的。HTML5 OptionsCollection添加方法是相同的(即“null”表示没有参数,不是javascriptnull对象)。

于 2012-08-17T06:54:30.857 回答
0

我可以找到的文档中,使用 null 参数没有任何意义。但是,很明显,不同浏览器中的 JavaScript 引擎对这个方法的处理方式不同,IE 不喜欢null作为第二个参数。

因此,按照口头禅,您应该使用 jQuery。它很好,可以做所有事情。它确实有助于保护您免受 DOM 的浏览器实现之间的差异,因为它具有相当广泛的兼容性。无论如何,它解决了这个人的问题。

您可能想要使用append()而不是add(). 例如:

var elOptNew = $('<option></option>');
...
elSel.append(elOptNew); 
于 2012-08-17T06:45:21.853 回答
0

尝试使用

elSel.options.add(elOptNew)

这必须适用于所有浏览器。见例子

于 2012-08-17T07:20:35.803 回答
0

还有另一种方法可以将新选项添加​​到选择中,即

var opts = elSel.options;
opts[opts.length] = new Option(dmindate.format("EE NNN d, yyyy"), dmindate.format("MM/dd/yyyy"));

适用于所有主流浏览器的示例

于 2012-08-17T07:20:59.983 回答