jquery等效/浏览器兼容e.parentNode.parentNode.childNodes [i] .innerText;

时间:2012-09-28 07:44:43

标签: javascript jquery internet-explorer cross-browser

我正在使用以下代码段来更新表格中的某些文本框值。

          <table>
               <tr>
                <td>
                    ProjectName
                </td>
                <td>
                    Block
                </td>
                <td>
                    .WorkProgressMilestone
                </td>
                <td>
                    Completion
                </td>

                 <td>
                    <span class="sep">
                        <img height="15px" width="20px" src="@Url.Content("~/Content/themes/base/images/Edit.png")" /></span><a
                            href="#" onclick="EditWorkDetails(this);" style="text-decoration: none">Edit</a>
                    <input id="WorkProgressEditID" name="WorkProgressEditID" type="hidden" value="@v.WorkProgressID" />
                </td>
      </tr>
     <tr>..</tr>
 </table>



function EditWorkDetails(e) {
document.getElementById("txtCompletion").value =        e.parentNode.parentNode.childNodes[3].innerText;
}

在IE中它适用于我,但在其他浏览器(Chrome)中无效。值得注意的是,表'td'和'tr'没有Id属性来区分对方。所以我不能在这里使用jquery。我可以遵循的替代方案是使其适用于所有浏览器。

3 个答案:

答案 0 :(得分:2)

试试这个:

document.getElementById("txtCompletion").value = $(this).parent().parent().children()[3].html();

$("txtCompletion").val($(this).parent().parent().children()[3].html());

答案 1 :(得分:1)

你有两个问题:

  1. innerText并非普遍支持。
  2. 除IE以外的所有浏览器&lt; 9(兼容模式下的IE 9)包括childNodes中的空白文本节点。 IE没有,所以如果你的tr.childNodes[3]元素之间有空格,<td>将引用不同的节点。
  3. 我建议修正:

    1. 使用element.textContent || elem.innerText。这是not perfect,但在大多数情况下都可以正常使用。
    2. 看起来你正在尝试获取表格单元格的文本内容。如果是这样,您可以使用表的cells属性,该属性被普遍支持回IE 4。
    3. 包含两个修复的示例代码:

      var td = e.parentNode.parentNode.cells[3];
      var tdText = td.textContent || td.innerText;
      

答案 2 :(得分:0)

所有浏览器都不支持

innerText,您可以尝试使用jquery 或

根据浏览器版本

使用.textContent和.innerText