Reputation: 1319
I am using the following snippet for updating some textbox value from a table.
<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;
}
It works fine for me in IE, but not working in other browsers(Chrome). A notable thing is that the table 'td's and 'tr's don't have Id property to distinguish each other. So I can't use jquery over here. What is the alternative I can follow to make it work in all browsers.
Upvotes: 0
Views: 1502
Reputation: 324677
Yyou have two problems:
innerText
is not universally supported.childNodes
. IE does not, so tr.childNodes[3]
is going to refer to different nodes if you have whitespace between your <td>
elements.The fixes I'd recommend:
element.textContent || elem.innerText
. This is not perfect but will work fine in most cases.cells
property of the table, which is universally supported back to IE 4.Example code with both fixes:
var td = e.parentNode.parentNode.cells[3];
var tdText = td.textContent || td.innerText;
Upvotes: 1
Reputation: 28705
try this:
document.getElementById("txtCompletion").value = $(this).parent().parent().children()[3].html();
or
$("txtCompletion").val($(this).parent().parent().children()[3].html());
Upvotes: 2
Reputation: 2554
innerText is not supported in all browsers, you might try using jquery or
use .textContent and .innerText based on browser version
Upvotes: 0