0

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

<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。我可以遵循什么替代方案使其在所有浏览器中都能正常工作。

4

3 回答 3

2

试试这个:

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

或者

$("txtCompletion").val($(this).parent().parent().children()[3].html());
于 2012-09-28T07:56:24.733 回答
1

你有两个问题:

  1. innerText不被普遍支持。
  2. 除了 IE < 9(和兼容模式下的 IE 9)之外的所有浏览器都在childNodes. IE 没有,因此tr.childNodes[3]如果<td>元素之间有空格,则将引用不同的节点。

我推荐的修复:

  1. 使用element.textContent || elem.innerText. 这并不完美,但在大多数情况下都可以正常工作。
  2. 看起来您正在尝试获取表格单元格的文本内容。如果是这样,您可以使用cellstable 的属性,它普遍支持回到 IE 4。

具有两个修复的示例代码:

var td = e.parentNode.parentNode.cells[3];
var tdText = td.textContent || td.innerText;
于 2012-09-28T08:45:25.373 回答
0

并非所有浏览器都支持 innerText,您可以尝试使用 jquery 或

根据浏览器版本使用 .textContent 和 .innerText

于 2012-09-28T07:54:08.090 回答