amesh
amesh

Reputation: 1319

Jquery equivalent/ Browser compatibility for e.parentNode.parentNode.childNodes[i].innerText;

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

Answers (3)

Tim Down
Tim Down

Reputation: 324677

Yyou have two problems:

  1. innerText is not universally supported.
  2. All browsers except IE < 9 (and IE 9 in compatibility modes) include whitespace text nodes in 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:

  1. Use element.textContent || elem.innerText. This is not perfect but will work fine in most cases.
  2. It looks like you're trying to get the text content of a table cell. If so, you can use the 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

Habibillah
Habibillah

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

Chandra Sekhar Walajapet
Chandra Sekhar Walajapet

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

Related Questions