jQuery .first() - 不适用于IE?

时间:2015-09-26 09:31:25

标签: javascript jquery internet-explorer

以下代码将带有radiobutton的单元格添加到表格的每一行并检查第一行:

$(document).ready(function () {
    $('tr').prepend('<td>');
    $('<input name="delete" type="radio"/>')
        .prependTo('tbody td:first-child')
        .first().attr('checked', true);
});

它不会检查IE 11,jquery-2.1.4的第一个无线电按钮,但可以与FireFox,Chrome和MS Edge一起正常工作;函数last()在这种情况下适用于IE,如预期的那样。这是一个错误吗?

2 个答案:

答案 0 :(得分:2)

first无关;它与第一个的事情有关。

true / falsechecked一起使用时,您希望使用属性,而不是属性。当jQuery使用带有布尔属性的attr时,jQuery过去常常跳过很多的箍来为人们设置可靠的跨浏览器属性/属性,但是很多这些箍被删除了(只有一些他们在v1.6中添加了prop

如果您使用prop,它也适用于IE11:

$(document).ready(function () {
    $('tr').prepend('<td>');
    $('<input name="delete" type="radio"/>')
        .prependTo('tbody td:first-child')
        .first().prop('checked', true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<table>
    <tbody>
        <tr></tr>
        <tr></tr>
        <tr></tr>
        <tr></tr>
    </tbody>
</table>

仅为了完整性:如果您 想要使用该属性,the specification要求该属性必须删除/不存在,因为该标志不是设置,并且必须是""或属性的名称(在本例中为"checked")才能设置:

  

元素上存在布尔属性表示真值,缺少属性表示假值。

     

如果该属性存在,则其值必须是空字符串或者是属性规范名称的ASCII不区分大小写匹配的值,没有前导空格或尾随空格。

     

注意:布尔属性上不允许使用值“true”和“false”。要表示错误值,必须完全省略该属性。

答案 1 :(得分:2)

您要将checked属性设置为"true"而不是"checked",这仅适用于选择将其作为值"checked"的浏览器。此外,由于属性是输入的初始值,因此在创建元素后它并不总是有效。

您希望设置当前值而不是初始值,即checked属性而不是checked属性。使用prop方法将checked属性设置为true

$(document).ready(function () {
    $('tr').prepend('<td>');
    $('<input name="delete" type="radio"/>')
        .prependTo('tbody td:first-child')
        .first().prop('checked', true);
});