Jquery 向下遍历DOM树 函数A(){ var计数=0; var A=0; var C=0; $('.JRow')。每个(函数(){ 计数++; 警报(计数); $this.$('.BtnSet')。每个(函数(){ A++; 警报(A); $this.$('.Child')。每个(函数(){ C++; 警报(C); if(“$(此)输入:text[name=“A[]”].length){ 警报(“$(此)输入:text[name=“A[]”].length); } }); }); }); 返回false; }

Jquery 向下遍历DOM树 函数A(){ var计数=0; var A=0; var C=0; $('.JRow')。每个(函数(){ 计数++; 警报(计数); $this.$('.BtnSet')。每个(函数(){ A++; 警报(A); $this.$('.Child')。每个(函数(){ C++; 警报(C); if(“$(此)输入:text[name=“A[]”].length){ 警报(“$(此)输入:text[name=“A[]”].length); } }); }); }); 返回false; },jquery,html,Jquery,Html,嗨,我需要穿越这个。如果我从JRow类开始,第一个JRow应该搜索它是否有BtnSet类。如果是,那么BtnSet类应该搜索它是否有子类。在我的示例中,由于第一组Btnset有两个子类,我需要遍历每个子类以获得最终输出,即文本框的长度。同样地,我需要遍历每个节点。当谈到第二个JRow时,它什么都没有。我真正的问题是如此复杂,我通过它提出了一个简单的问题。如果有人知道这一点,请帮助我,因为我已经为此挣扎了很多天 您正在寻找find()函数吗?将查找所选元素的匹配子体 您可能需要的不是$this.$

嗨,我需要穿越这个。如果我从JRow类开始,第一个JRow应该搜索它是否有BtnSet类。如果是,那么BtnSet类应该搜索它是否有子类。在我的示例中,由于第一组Btnset有两个子类,我需要遍历每个子类以获得最终输出,即文本框的长度。同样地,我需要遍历每个节点。当谈到第二个JRow时,它什么都没有。我真正的问题是如此复杂,我通过它提出了一个简单的问题。如果有人知道这一点,请帮助我,因为我已经为此挣扎了很多天

您正在寻找
find()
函数吗?将查找所选元素的匹配子体

您可能需要的不是
$this.$('.BtnSet')
,而是:

<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>
还可以尝试使用中间变量,以便记录/调试代码。令人惊讶的是,人们不费心去看正在发生的事情,然后又想知道为什么他们不能调试或找出他们的代码哪里错了

原则:如果您不能记录或检查中间步骤,并且总体行为中涉及多个步骤,那么您将无法有效地调试总体行为中的故障

你将陷入极度无效的试错,这通常是失败的

如果(“$(this)input:text[name=“A[]”].length){,请尝试如下调试,而不是

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

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

不正确
$(this)

改变

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) {

您的代码将变为

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;
}
参考资料

正如

在OP的评论后更新

使用


你能不能简短一点,把你的问题格式化?Thanx alot.会仔细检查它们,以便更好地理解。我需要知道一个类是否有另一个类作为子类。最重要的是它应该找到所选类的子类。这就是为什么我使用$(此)在每个部分中。我使用的方式是否错误?@Lakmini检查更新的答案
$('.JRow')。有('.BtnSet');
,“将返回很酷的值,即true或false”,那不是真的,它返回一个过滤的集合,它不返回布尔值。@未定义是的,是我的错误,我已经更新了it@Thushar当前位置非常感谢您的清晰解释。我会仔细阅读。非常感谢您,先生。我对JQuery真的很陌生。我仍在努力理解它。我会仔细阅读您所说的内容。
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;
$('.JRow').has('.BtnSet');

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

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