Javascript 创建DOM';选项';带有'的元素;选定的';属性

Javascript 创建DOM';选项';带有'的元素;选定的';属性,javascript,jquery,Javascript,Jquery,为什么这段代码在jQuery1.5中可以正常工作,而在jQuery1.6中却不能?jquery在这两个版本之间创建DOM节点的方式是否有已知的变化 var birth = new Date(), current = new Date().getFullYear() - 13, year = $('select#year'), i = 0; birth.setFullYear(1992, 10, 3); while (i < 48) { var option

为什么这段代码在jQuery1.5中可以正常工作,而在jQuery1.6中却不能?jquery在这两个版本之间创建DOM节点的方式是否有已知的变化

var birth = new Date(),
    current = new Date().getFullYear() - 13,
    year = $('select#year'),
    i = 0;
birth.setFullYear(1992, 10, 3);
while (i < 48) {
    var option = $('<option>', { 
        value: current - i,
        text: current - i,
        selected: (current - i === birth.getFullYear()) ? 'selected' : ''
    });
    year.append(option);
    i++;
}
var birth=new Date(),
当前=新日期()。getFullYear()-13,
年份=$(“选择年份”),
i=0;
出生。整岁(1992年10月3日);
而(i<48){
变量选项=$('',{
值:当前-i,
文本:当前-i,
选中:(当前-i==birth.getFullYear())?“选中”:”
});
年份。追加(可选);
i++;
}
见和。第一个选项只选择一个选项,而第二个选项将
selected=“selected”
添加到每个选项

注意,目前我只在Chrome中测试了这一点

selected: (current - i === birth.getFullYear()) ? 'selected' : ''
将产生

selected="selected"

在这两种情况下,浏览器都会将
视为选中的
集。这是因为
selected
是一个布尔值;它的存在表明它应该被选中

您应该使用jQuery 1.6中引入的:

var option = $('<option>', { 
        value: current - i,
        text: current - i
    }).prop('selected', current - i === birth.getFullYear());
var选项=$('',{
值:当前-i,
文本:当前-i
}).prop('selected',current-i==birth.getFullYear());

或者,如果您希望将所有内容都包含在对象中:

var option = $('<option>', { 
        value: current - i,
        text: current - i,
        selected: (current - i === birth.getFullYear())
    });
var选项=$('',{
值:当前-i,
文本:当前-i,
选中:(当前-i==birth.getFullYear())
});
将产生

selected="selected"

在这两种情况下,浏览器都会将
视为选中的
集。这是因为
selected
是一个布尔值;它的存在表明它应该被选中

您应该使用jQuery 1.6中引入的:

var option = $('<option>', { 
        value: current - i,
        text: current - i
    }).prop('selected', current - i === birth.getFullYear());
var选项=$('',{
值:当前-i,
文本:当前-i
}).prop('selected',current-i==birth.getFullYear());

或者,如果您希望将所有内容都包含在对象中:

var option = $('<option>', { 
        value: current - i,
        text: current - i,
        selected: (current - i === birth.getFullYear())
    });
var选项=$('',{
值:当前-i,
文本:当前-i,
选中:(当前-i==birth.getFullYear())
});

将else部分设置为false

var birth = new Date(),
    current = new Date().getFullYear() - 13,
    year = $('select#year'),
    i = 0;
birth.setFullYear(1992, 10, 3);
while (i < 48) {
    var option = $('<option>', {
        value: current - i,
        text: current - i,
        selected: ((current - i) === (birth.getFullYear())) ? 'selected' :false
    });
    year.append(option);
    i++;
}
var birth=new Date(),
当前=新日期()。getFullYear()-13,
年份=$(“选择年份”),
i=0;
出生。整岁(1992年10月3日);
而(i<48){
var选项=$(''{
值:当前-i,
文本:当前-i,
已选择:((当前-i)==(birth.getFullYear())?“已选择”:false
});
年份。追加(可选);
i++;
}

这是小提琴

将else部分设置为false

var birth = new Date(),
    current = new Date().getFullYear() - 13,
    year = $('select#year'),
    i = 0;
birth.setFullYear(1992, 10, 3);
while (i < 48) {
    var option = $('<option>', {
        value: current - i,
        text: current - i,
        selected: ((current - i) === (birth.getFullYear())) ? 'selected' :false
    });
    year.append(option);
    i++;
}
var birth=new Date(),
当前=新日期()。getFullYear()-13,
年份=$(“选择年份”),
i=0;
出生。整岁(1992年10月3日);
而(i<48){
var选项=$(''{
值:当前-i,
文本:当前-i,
已选择:((当前-i)==(birth.getFullYear())?“已选择”:false
});
年份。追加(可选);
i++;
}

这是小提琴

谢谢,这很有道理。是否有充分的理由使用第一个使用
prop
的解决方案来替代第二个只在对象中返回布尔值的解决方案?@Tauren:no。它们都一样。我把它放在那里是因为你想知道在1.5到1.6之间发生了什么变化。在1.6中,jQuery开始处理布尔值以及布尔值。所以你不能再把它设为空字符串了。谢谢,这很有意义。是否有充分的理由使用第一个使用
prop
的解决方案来替代第二个只在对象中返回布尔值的解决方案?@Tauren:no。它们都一样。我把它放在那里是因为你想知道在1.5到1.6之间发生了什么变化。在1.6中,jQuery开始处理布尔值以及布尔值。所以不能再将其设置为空字符串。