Независимость браузера не получает значение строки таблицы - PullRequest
0 голосов
/ 27 декабря 2011

Я не могу получить значение строки, потому что даёт Object Text (в FireFox и Chrome), где должен быть Object HTMLInputElement (который находится в IE). Это работает гладко в IE, но не в Firefox.

HTML код:

<table id="mode">

<tr class="jnclisthdrrow">
    <td class ="jnclistcenter">&nbsp;</td>
    <td class ="jnclistcenter">Rank</td>
    <td class ="jnclistcenter">Mode</td>

 </tr>
 <tr>
    <td class ="jnclistcenter">&nbsp;</td>
    <td class ="jnclistcenter">&nbsp;</td>
    <td class ="jnclistcenter">&nbsp;</td>

</tr>
<tr >
<td class="jnclistcb">
    <input type=checkbox name="MODE_SL_Instance" value="0"></td>
<td align="center" class="tdata">   1</td>
<td class = "listdataright"><option value=''></option><option value='1246'>CWT</option>
</td>
</tr>
</table>

код скрипта JAVA

 var table = document.getElementById("mode");
 var max = table.rows.length;
 console.log("no of rows are being selected="+max );
for ( var id = 0; id < max; id++ )
{   
    var row = table.rows[id];   
    var chkbox = row.cells[0].childNodes[0];
 if( null != chkbox && true == chkbox.checked ) 
    {
 console.log("inside the condition that anddeleted id ="+ id);
 table.deleteRow(id); 
    id--;
    }
}

Консоль журнала разных браузеров

для FireFox и Chrome

Нет выбранных строк = 3

значение поля chkbox.checked = = неопределено значение флажка = [текст объекта]

значение поля chkbox.checked = = неопределено значение флажка = [текст объекта]

значение поля chkbox.checked = = неопределено значение флажка = [текст объекта]

для IE

не выбран ряд строк = 3

значение поля chkbox.checked = = неопределено значение флажка = [текст объекта]

значение поля chkbox.checked = = неопределено значение флажка = [текст объекта]

значение поля chkbox.checked равно = true значение флажка = [объект HTMLInputElement]

внутри условия, которое anddeleted id = 2

Строка удалена!

У меня вопрос, почему Firefox не может распознать эту строку 2 как [объект HTMLInputElement]. Куда я иду не так? Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 28 декабря 2011

Я смотрю много мест и, наконец, пришел к этому решению

            var chkbox = row.cells[0].childNodes[0];
    var ct =chkbox.nodeValue;
    if(/\n^/m.test(ct)) \\ in FIREFOX it will \n+four space so i put a regexp
    chkbox = row.cells[0].childNodes[1];

Теперь этот работает отлично и спасибо * gsnedders *, кто рассказал мне, что на самом деле происходит позади. Спасиболот gsnedders

0 голосов
/ 27 декабря 2011

Firefox и Chrome соответствуют спецификации W3C;Я считаю, что IE9 ведет себя так же.

Ваш код полагается на IE <9, пропускающий текстовые узлы, состоящие из пробелов.Для третьей строки Firefox, Chrome и IE9 предоставляют два дочерних узла для первой ячейки: текстовый узел, содержащий <code>\n (т. Е. Символ новой строки, за которым следуют четыре пробела), и элемент ввода.IE <9 пропускает первый текстовый узел, потому что он состоит исключительно из пробелов. </p>

Самое простое решение этой проблемы - использовать children[0] вместо childNodes[0], поскольку это дает первого Element потомка, так какпротив первого ребенка.

...