javascript - document.getElementsByName 在 IE11 中不起作用,但在 IE8 中运行良好?

标签 javascript jquery internet-explorer

在 IE11 中 document.getElementsByName 未按预期工作。

var colRadioButtonSelected = document.getElementsByName("radioButtonSelected_" + containerCurrencyCode);

var colLabelNetDollarsDue = document.getElementsByName("labelNetDollarsDue_" + containerCurrencyCode);

var colLabelUSDAmount = document.getElementsByName("labelUSDAmount_" + containerCurrencyCode); 
            for(var x=0; x < colRadioButtonSelected.length; x++)
            {      
                colRadioButtonSelected[x].disabled = readOnly ? "disabled" : ""; 
                var textNetDollarsDue = colLabelNetDollarsDue[x].innerText;

已调试代码,发现 document.getElementsByName 部分在 IE 版本中返回不同类型的值。

enter image description here

尝试过如下所示的包装器,但对我不起作用。有什么帮助吗?

function getElementsByNameWrapper(name) {
  a = new Array();

  for (var i = 0; i < document.getElementsByName(name).length; ++i) {
    a.push(document.getElementsByName(name)[i]);
  }

  return a;
}

已更改为

var textNetDollarsDue = colLabelNetDollarsDue[x].textContent ||
    colLabelNetDollarsDue[x].innerText;

错误看起来像

enter image description here

HTML 标记如下所示..

<asp:Repeater ID="ReportRepeater" runat="server" OnItemDataBound="ReportRepeater_ItemDataBound">
                                            <ItemTemplate>
                                                <tr class="<%# OddEven("odd", "even") %>">
                                                    <td align="center"><input type="radio" id="radioButtonSelected_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>" name="radioButtonSelected_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>" disabled="disabled" style="visibility: <%# (string.IsNullOrEmpty(((ReportEntity)Container.DataItem).SecurityNumber) || string.IsNullOrEmpty(((ReportEntity)Container.DataItem).CusipNumber)) ? "hidden" : "" %>;" value="<%# ((ReportEntity)Container.DataItem).IncomeReportId %>" /></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).IncomeStatus %></td>
                                                    <td align="left"><%# String.Format("{0:d}", ((ReportEntity)Container.DataItem).AllocationDate) %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).SedolNumber %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).IsinNumber %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).ReportEvent %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).ReferenceNumber %></td>
                                                    <td align="left"><%# String.Format("{0:d}", ((ReportEntity)Container.DataItem).RecDate) %></td>
                                                    <td align="left"><label id="labelPayDate_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>"><%# String.Format("{0:d}", ((ReportEntity)Container.DataItem).PayDate) %></label></td>
                                                    <td align="right"><%# String.Format("{0:#,##}",((ReportEntity)Container.DataItem).Quantity) %></td>
                                                    <td align="right"><%#  ((ReportEntity)Container.DataItem).BaseRate %></td>
                                                    <td align="right"><label id="labelNetDollarsDue_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>"><%# Formatting.FormatCurrency(((ReportEntity)Container.DataItem).NetDollarsDue).Replace("$","")%></label></td>
                                                    <td align="center"><label id="labelUSDAmount_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>"></label></td>
                                                    <td align="center">&nbsp;</td>
                                                    <td style="width:120px" align="center"><a id="Details" runat="server" >Show Details</a></td>                                    
                                                </tr>  

最佳答案

您的问题与.getElementsByName()无关。问题在于 IE11 支持标准 .textContent,而不是旧的(非标准).innerText

您可以像这样解释任一版本:

 var textNetDollarsDue = colLabelNetDollarsDue[x].textContent ||
    colLabelNetDollarsDue[x].innerText;

编辑 - 上面的内容有点正确(尽管 IE11 可能仍然理解 .innerText),但是随着您的标记发布,现在很明显问题在于您'正在使用 ByName() API,但您确实对“id”值感兴趣。您可以使用类名来代替这些标签的“id”;无论如何,标记对于所有这些重复的“id”值都是无效的。

关于javascript - document.getElementsByName 在 IE11 中不起作用,但在 IE8 中运行良好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31680017/

相关文章:

jquery - 如何根据角色隐藏 Web 应用程序用户的选项卡

javascript - jQuery 将选择器限制为其父级

html - 仅在 IE 10 中应用的用于列表项的 CSS 填充

html - 如何在 Express (Node.js) 模板中为 Internet Explorer 保留条件 CSS 语句

html - css: column-count property , IE10 显示不像其他浏览器

javascript - Jade 从路由器传递对象/数组时出错

javascript - 如何使用 javascript 或 jquery 从字符串中提取 html 标签的内容?

jquery选择最接近的div

javascript - 删除基于另一个数组的数组元素

javascript - 在使用 Javascript 上传文件之前显示图像和图像扩展名验证