我知道 Internet Explorer <9 的 Javascript 数组存在问题。我尝试过使用 权宜之计,但我一生都无法弄清楚这一点。
基本上,我有这个代码(减少了):
YUI.add('query-params', function (Y) {
Y.QueryParams = {
/**
Parses our query string and returns an object containing the k/v pairs passed
in rules
@method parse
@param {String} query string to parse
@param {RegExp} regex rules to compare our query string against
@return {Object} returns an object containing the k/v pairs that match
*/
parse: function (qs, rules, params) {
qs = qs.replace('?', ''); // remove ? from query string
qs = qs.replace(/\+/g, ' ');
var matches = rules.exec(qs);
var defined_matches = Y.Array.filter(matches, function(m) {
return ((typeof m != 'undefined') || ( m == true ));
});
// rest of script omitted
它被初始化为:
<script>
YUI({
modules: {
'query-params': {
fullpath: './parse_search_terms.js'
}
},
onFailure: function (error) {
console.log(JSON.stringify(error));
}
}).use('node', 'console', 'query-params', function (Y) {
var params = Y.QueryParams.parse(window.location.search, /(\w+)\s(\w+)\s(\w+)|(\w+)\s(\w+)/ig, ["firstName", "lastName", "state"]);
var url = "url_to_send_to?firstName=" + params.firstName + "&lastName=" + params.lastName + "&state=" + params.state;
var iframe = Y.Node.create('<iframe></iframe>').setAttrs({
src: url,
frameBorder: 'no',
height: 300,
width: 800,
scrolling: 'no'
});
Y.one('#iframe').appendChild(iframe);
});
当我传递像“q=john+smith+ca”和 JSON.stringify 这样的查询字符串时,我在 IE、Firefox 和 Chrome 中得到的匹配变量是这样的:
john smith ca,john,smith,ca,,
当我在数组上调用 Y.Array.filter 时,Firefox 和 Chrome 会做正确的事情:
defined ["john","smith","ca"]
但是 Internet Explorer 8:
defined ["john","smith","ca","",""]
所以由于某种原因,IE 没有正确过滤我的数组。我已经尝试了所有上述阵列垫片和权宜之计,但似乎没有任何效果。我认为这将是非常有效的跨浏览器,因为我使用的是 YUI3,但我很难过。
有人有想法么?非常感谢帮助。