getElementsByName в IE7

Вы можете извлечь столбцы, выполнив:

select substring_index(column, ',', 1) as data
from t
union all
select substring_index(substring_index(column, ',', 2), -1) as data
from t
where column like '%,%'
union all
select substring_index(substring_index(column, ',', 3), -1) as data
from t
where column like '%,%,%'
union all
select substring_index(substring_index(column, ',', 4), -1) as data
from t
where column like '%,%,%,%';

Получить идентификатор ребенка сложно Вы можете сделать это, используя исходный столбец и некоторые переменные:

select c.col_id, t.data
from (select column, substring_index(column, ',', 1) as data
      from t
      union all
      select column, substring_index(substring_index(column, ',', 2), -1) as data
      from t
      where column like '%,%'
      union all
      select column, substring_index(substring_index(column, ',', 3), -1) as data
      from t
      where column like '%,%,%'
      union all
      select column, substring_index(substring_index(column, ',', 4), -1) as data
      from t
      where column like '%,%,%,%'
     ) t join
     (select column, (@rn := @rn + 1) as col_id
      from t cross join
           (select @rn := 0) params
     ) c
     on t.column = c.column;
17
задан Jason Bunting 10 November 2008 в 18:49
поделиться

5 ответов

В случае, если Вы не знаете, почему это не работает в IE, вот документация MSDN относительно той функции :

при использовании getElementsByName метода все элементы в документе, которые имеют атрибут указанного имени или идентификационное значение атрибута, возвращаются.

Элементы, которые поддерживают и атрибут ИМЕНИ и идентификационный атрибут, включены в набор, возвращенный getElementsByName методом, но элементы с ИМЕНЕМ expando не включены в набор; поэтому, этот метод не может использоваться для получения пользовательских тегов по имени.

Firefox позволяет getElementsByName() получать элементы, которые используют ИМЯ expando, который является, почему он работает. Является ли это Хорошим Thingв „ў, может подлежать дебатам, но это - действительность их.

Так, одна опция состоит в том, чтобы использовать getAttribute() метод DOM, чтобы попросить атрибут ИМЕНИ и затем протестировать значение, чтобы видеть, является ли это тем, что Вы хотите, и если так, добавьте его к массиву. Это потребовало бы, однако, чтобы Вы выполнили итерации по всем узлам на странице или по крайней мере в подразделе, который не был бы самым эффективным. Вы могли ограничить тот список заранее при помощи чего-то как getElementsByTagName() , возможно.

Другой способ сделать это, если Вы управляете HTML страницы, должно дать все элементы интереса идентификатор, который варьируется только числом, например:

<div id="Change0">...</div>
<div id="Change1">...</div>
<div id="Change2">...</div>
<div id="Change3">...</div>

И затем имеют JavaScript как это:

// assumes consecutive numbering, starting at 0
function getElementsByModifiedId(baseIdentifier) {
    var allWantedElements = [];
    var idMod = 0;
    while(document.getElementById(baseIdentifier + idMod)) { // will stop when it can't find any more
        allWantedElements.push(document.getElementById(baseIdentifier + idMod++));
    }
    return allWantedElements;
}

// call it like so:
var changes = getElementsByModifiedId("Change");

, Который является взломом, конечно, но он сделал бы задание, в котором Вы нуждаетесь и не слишком неэффективны, выдерживают сравнение с некоторыми другими взломами.

при использовании платформы/инструментария JavaScript некоторого вида, Вы опции намного лучше, но у меня нет времени для вхождения в те специфические особенности, если Вы не указываете на использование того. Лично, я не знаю, как люди живут без одного, они экономят так много времени, усилия и разочарования, что Вы не можете позволить себе не для использования того.

17
ответ дан 30 November 2019 в 12:58
поделиться

Существует несколько проблем:

  1. IE действительно путает id="" с name=""
  2. name="", не позволяется на <span>

Для фиксации, я предлагаю:

  1. Изменение весь name="" к class=""
  2. Изменение Ваш код как это:

-

var changes = document.getElementById('text').getElementsByTagName('span');
for (var c=0; c<changes.length; c++) {
 var ch = changes[c];

 if (ch.className != from)
continue;

 var current = new String(ch.innerHTML);
4
ответ дан 30 November 2019 в 12:58
поделиться

Не очень распространено найти элементы с помощью свойства NAME. Я рекомендовал бы переключиться на свойство ID.

можно однако найти элементы с собственным именем с помощью jQuery:

 $("*[name='whatevernameYouWant']");

это возвратит все элементы с именем.

2
ответ дан 30 November 2019 в 12:58
поделиться

getElementsByName поддерживается в IE, но существуют ошибки. В особенности это возвращает элементы, ‘id’ которых соответствуют данному значению, а также ‘name’. Не может сказать, является ли это проблемой, Вы имеете без немного большего количества контекста, кода и фактических сообщений об ошибках все же.

В целом, getElementsByName, вероятно, лучше всего избегают, потому что атрибут ‘name’ в HTML имеет несколько перекрывающихся целей, которые могут перепутать. Используя getElementById намного более надежно. При специфическом работании с полями формы можно более надежно использовать form.elements [имя] для получения полей, которые Вы ищете.

1
ответ дан 30 November 2019 в 12:58
поделиться
1
ответ дан 30 November 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: