2014-12-03 2 views
0

Я хочу использовать jQuery для вложенного getElementsByTagName. Многие вопросы касаются вложенных друг в друга, но они переходят в специальные темы. Я не могу понять что-то, что, вероятно, очень просто. В чистом JavaScript у меня есть:Замена jQuery для вложенных getElementsByTagName

tables = document.getElementsByTagName('table'); 
for (var t = 0; t < tables.length; t++) 
{ 
    thisTable = tables[t]; 
    if (thisTable.id == "specialID") 
    { 
     inputs = thisTable.getElementsByTagName("input"); 
     for (var r=0; r < inputs.length; r++) 
     { 
      thisInput = inputs[r]; 
      if (thisInput.type == "radio") 
      { 
       if (thisInput.checked == true) 
       { 
        [do stuff] 
        break; 
       } 
      } 
     } 
    } 
} 

В основном это делает некоторые проверки на некоторых переключателях внутри нужной таблицы. Синтаксис вложенного getElementByTagName вызывает проблемы при попытке конвертировать в jQuery. Пока у меня есть это:

$("table").each(function() { 
    if (this.id == "specialID") 
    { 
     $("this:input").each(function() { 
      alert("I am here"); 
      [test for radio and do stuff] 
     }); 
    } 
}); 

Первый «каждый» на столах работает отлично и находит все таблицы. Но второй «каждый» на входах не выбирает никаких элементов управления входами внутри конкретной таблицы. Я подозреваю, что $ ("this.input") неверен, но я пробовал много других вещей здесь, и я получаю синтаксические ошибки или не лучшие результаты. Каков правильный способ формирования синтаксиса, который позволяет мне перебирать все входы внутри одной из таблиц?

+0

Попробуйте '$ (this) .find (" input ")' вместо '$ (" this: input ")' –

ответ

0

Как вы можете иметь только один стол с id"specialID", вы можете сделать это:

$("#specialId input").each(function() { 
    // ...do stuff with the input 
}); 

Однако в общем случае, когда вы могли бы иметь более чем один внешний элемент и хотите обращаться с вещами на внутренних элементах лишь некоторые из них:

$("selector-for-outer-element").each(function() { 
    if (/*...some condition...*/) { 
     $(this).find("selector-for-inner-elements").each(function() { 
      // ...do something with the inner elements 
     }); 
    } 
}); 

Или, если условие может быть выражено как селектор, naturall y примените условие таким образом:

$("selector-for-outer-element.some-condition selector-for-inner-elements").each(function() { 
    // ...do something with the inner elements 
}); 

... это в основном то, что я сделал с самым первым фрагментом выше.

+0

Спасибо, TJCrowder. Я пытаюсь применить ваше первое предложение, но столкнулся с проблемой. В то время как мой исходный пост дал упрощенный «specialID», я пытался защитить детали, а это то, что я фактически проверяю таблицы с идентификатором, который СОДЕРЖИТ «specialID». Поэтому у меня нет ID. Тем не менее, у меня есть this.ID, поэтому вместо вашего $ ("# specialId input") каждый (function() я использовал $ ("# this.id input"). Each (function(). work ?-(Не существует способа использовать «this» или «$ this» в селекторе каким-то образом, с оговоркой, что я действительно хочу, это входы от «этого»? Спасибо. – roricka

+0

@ user3487095 : Да, с помощью конкатенации строк: '$ (" # "+ this.id +" input "). Each (...' Но если 'this' - это элемент, который имеет' input 'в нем, вы можете использовать вместо этого: '$ (this) .find (« input »). each (...' –

+0

ОК, я обнаружил, как использовать это в селекторе. $ ($ (this)). Каждый работает, или я могу назначьте локальную вкладку = $ (это) и просто используйте $ (tab) .each. Но как мне получить входные данные? Я пробовал $ (вкладка: ввод), $ (вкладка ввода) и $ (tab.input), но ни один – roricka