2013-09-21 4 views
0
<html> 
<head> 
<script> 
function A(){ 

    var count=0; 
    var A=0; 
    var C=0; 

    $('.JRow').each(function(){ 
    count++; 

    alert(count); 


     $this.$('.BtnSet').each(function(){ 
     A++; 
     alert(A); 

     $this.$('.Child').each(function(){ 
     C++; 
     alert(C); 

     if(('$(this) input:text[name="A[]"]').length){ 

     alert('$(this) input:text[name="A[]"]').length); 
     } 

     }); 

     }); 
}); 

    return false; 
} 
</script> 
</head> 
<body> 
<form onsubmit="return A()"> 
    <div class="row JRow"> 
    <input type="text" name="B[]"></input> 
    <input type="text" name="B[]"></input> 
     <div class="BtnSet"> 
      <div class="Child"> 

      </div> 

      <div class="Child"> 
       <input type="text" name="A[]"></input> 
       <input type="text" name="A[]"></input> 
       <input type="text" name="A[]"></input> 
      </div> 

     </div> 
    </div> 
<div class="JRow"></div> 
    <input type="submit" value="Submit"></input> 
</form> 
</body> 
</html> 

Привет, мне нужно пройти через это. Если я начинаю с класса JRow, первый JRow должен искать, имеет ли он класс BtnSet. Если это так, класс BtnSet должен искать, имеет ли он дочерний класс. В моем примере, поскольку в первом наборе Btnset есть 2 дочерних класса, мне нужно пройти каждый из них, чтобы получить окончательный вывод, который, длина его текстовых полей. Точно так же мне нужно идти каждый узел. Когда дело доходит до второго JRow, у него ничего нет. Мой реальный вопрос настолько сложный, и я поставил перед ним простой вопрос. Пожалуйста, если кто-нибудь знает, что это помогает мне, так как я борется с этим в течение многих дней.Прохождение вниз по дереву DOM

+0

Не могли бы вы немного кратким и форматировать ваш вопрос? –

+2

[Как работает jQuery!] (Http://learn.jquery.com/about-jquery/how-jquery-works/) – undefined

+0

Thanx alot. Пройдут через них, чтобы лучше понять. – Lakmini

ответ

1

Вы ищете функцию find()? Это найдет совпадающие потомки выбранного элемента (ов).

Вместо $this.$('.BtnSet'), вы, вероятно, хотите:

$(this).find('.BtnSet') 

Попробуйте также с использованием промежуточных переменных, так что вы можете войти/или отладки кода. Удивительно, как люди не утруждают себя пониманием происходящего, а затем задаются вопросом, почему они не могут отлаживать или определять, где их код неправильный.

Принцип: если вы не можете зарегистрировать или проверить промежуточный шаг, и есть более одного шага, участвующих в общем поведении, вы не сможете эффективно отладить сбой в общем поведении.

Вы будете уменьшены до крайне неэффективной пробной ошибки, которая обычно терпит неудачу.

Вместо if(('$(this) input:text[name="A[]"]').length){, попробуйте отладки как:

var inputsAll = $(this).find('input'); // just for learning & debugging 
var inputsA = $(this).find('input:text[name="A[]"]'); 
console.log(' found inputs', inputsAll, inputsA); 
if (inputsA.length) { 

Вы не можете поставить $ (это) внутри селектора. Селекторы представляют собой текстовое выражение, вызывающее jQuery для выбора/или обертывания элемента DOM - это вызов функции Javascript. Вы не можете волшебным образом мешать им.

+1

К. Большое вам спасибо. Im действительно очень новый для JQuery. Все еще работаю, чтобы понять это. Я пройду то, что вы сказали. – Lakmini

1

$this не является правильным $(this)

изменение

if(('$(this) input:text[name="A[]"]').length){ 

в

if ($(this).find('input:text[name="A[]"]').length) { 

вы код становится

function A() { 
    var count = 0; 
    var A = 0; 
    var C = 0; 
    $('.JRow').each(function() { 
     count++; 
     alert(count); 
     $(this).find('.BtnSet').each(function() { 
      A++; 
      alert(A); 
      $(this).find('.Child').each(function() { 
       C++; 
       alert(C); 
       if ($(this).find('input:text[name="A[]"]').length) { 

        alert(('$(this) input:text[name="A[]"]').length); 
       } 
      }); 
     }); 
    }); 
    return false; 
} 

если вы просто хотите, чтобы подсчитать длину вы можете использовать

$('.JRow').length; 

Ссылки

.length

.find()

http://learn.jquery.com/javascript-101/this-keyword/

How jQuery Works, как прокомментировал undefined

Обновлено после комментария OP в

Использование .has()

$('.JRow').has('.BtnSet'); 

$('.JRow > .BtnSet').has('.child'); 

$('.JRow > .BtnSet >.child').has('input:text[name="A[]"]'); 
+0

Мне нужно знать, имеет ли класс другой класс в качестве дочернего. Самое главное - найти ребенка выбранного класса. поэтому я использовал $ (это) в каждой части. Я не ошибаюсь? – Lakmini

+0

@Lakmini проверить обновленный ответ –

+0

'$ ('. JRow'). Has ('. BtnSet');', _ "вернет прохладное значение, то есть true для false" _, это не так, оно возвращает фильтрованную коллекцию, это не возвращает s логическое значение. – undefined

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