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,它什么都没有。我真正的问题是如此复杂,我通过它提出了一个简单的问题。请如果有人知道这可以帮助我,因为我已经为此苦苦挣扎了很多天。

4

2 回答 2

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;

参考

。长度

。寻找()

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

未定义的 jQuery是如何工作的

OP评论后更新

使用.has()

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

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

$('.JRow > .BtnSet >.child').has('input:text[name="A[]"]');
于 2013-09-21T01:38:14.827 回答
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) {

您不能将 $(this) 放在选择器内。选择器是一个文本表达式,调用 jQuery 来选择/或包装一个 DOM 元素是一个 Javascript 函数调用。你不能神奇地把它们混在一起。

于 2013-09-21T01:37:20.490 回答