2016-01-30 2 views
-2

Что-то в содержании TD innerHTML предотвращает его смену увидеть https://jsfiddle.net/ot8vfwc0/Почему я не могу заменить innerHTML в этом случае

Как заставить его заменить программным способом, даже если есть что-то скрытых сверхъестественных персонажей?

<table> 
    <thead> 
     <tr> 
     <th scope="col" colspan="1">TITLE</th> 
     </tr> 
     <tr> 
      <th>Column 1</th> 
      <th>Column 2</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 

      <td><br>WEIRD 
       DO NOT WANT TO BE REPLACED</td> 


     </tr> 
    </tbody> 
</table> 

сценарий:

var myTable = document.getElementsByTagName('table')[0]; 
    var myTbody = myTable.getElementsByTagName('tbody')[0]; 
    _tr = myThead.getElementsByTagName("TR")[0]; 
    _td = _tr.getElementsByTagName("TD")[0]; 
    _th.innerHTML = "TEXT REPLACED"; 
+1

'myThead' и' _th' не были объявлены нигде – nikhil

ответ

3

Это довольно странный случай извлечения JavaScript 1998 года. Не говоря уже о том, что вы выделяете столько варов, вы явно забываете, какие из них вы определили.

Упростить это с современной JS вместо:

var td = document.querySelectorAll("table tbody tr td")[0]; 
td.textContent="new text"; 

Это становится все <td> элементы часть table→tbody→tr→td цепи, мы выбираем первый, то мы устанавливаем его новое содержание. как текст, а не как HTML, потому что это было бы глупо и потенциально опасно для безопасности, если контент исходит из чего-либо «не жестко закодированного».

Если мы хотим добавить DOM элементов в нем, мы будем использовать document.createElement(...) и td.appendChild(...) конечно:

// find and clear the element 
var td = document.querySelectorAll("table tbody tr td")[0]; 
td.textContent=''; 

// form new content and add it in 
var p = document.createElement("p"); 
p = "check me out, I'm a paragraph"; 
td.appendChild(p); 

Держите его проста: использовать современные JavaScript. За последние 17 лет это стало намного проще.

+0

Это устаревшее приложение на старый браузер. – user310291

+0

Мой код работает, просто с этим специальным контентом это не так. – user310291

+0

Не имеет значения - старые браузеры устарели. Даже интернет-исследователь 8 и ниже буквально был оставлен Microsoft с 12 января. И нет, ваш код абсолютно не работает, потому что вы объявляете так много переменных, что даже не замечаете, что вы ** не ** объявили '_th', который вы пытаетесь использовать. Ваш код довольно сломан, и вам нужно его очистить. К счастью, http://caniuse.com может помочь вам понять, какой современный синтаксис безопасен для вашей целевой аудитории. –

1

Попробуйте это:

var myTable = document.getElementsByTagName('table')[0]; 
var myTbody = myTable.getElementsByTagName('tbody')[0]; 
_tr = myTbody.getElementsByTagName("TR")[0]; 
_td = _tr.getElementsByTagName("TD")[0]; 
_td.innerHTML = "TEXT REPLACED"; 

myThead Заменить с myTbody и _th с _td.

+2

серьезно, давайте не будем использовать 1998 JavaScript, используйте современный JS (у нас уже есть 'document.querySelector') –

+0

Полностью согласовано, это гораздо лучшее и чистое решение. – Armaiti

1

myThead и _th не определены. Замените их myTbody и _td, и он будет работать.

Смежные вопросы