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