Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery计算两个特定行之间的表行数 父1 儿童1 儿童2 ... 父母2 ..._Javascript_Jquery_Html Table - Fatal编程技术网

Javascript 使用jQuery计算两个特定行之间的表行数 父1 儿童1 儿童2 ... 父母2 ...

Javascript 使用jQuery计算两个特定行之间的表行数 父1 儿童1 儿童2 ... 父母2 ...,javascript,jquery,html-table,Javascript,Jquery,Html Table,如何使用jQuery查找父级_1和父级_2之间的子行数 编辑:抱歉,没有明确说明这只是一个示例,该表可以包含任意数量的父行,也可以包含任意数量的子行假设父行1和父行2分别是起始行和结束行: <table> <tr id="parent_1"> <td>Parent 1</td> </tr> <tr class="child"> <td>Child 1</td> <

如何使用jQuery查找父级_1和父级_2之间的子行数


编辑:抱歉,没有明确说明这只是一个示例,该表可以包含任意数量的父行,也可以包含任意数量的子行

假设父行1和父行2分别是起始行和结束行:

<table>
  <tr id="parent_1">
    <td>Parent 1</td>
  </tr>
  <tr class="child">
    <td>Child 1</td>
  </tr>
  <tr class="child">
    <td>Child 2</td>
  </tr>
  ...
  <tr id="parent_2">
    <td>Parent2</td>
  </tr>
  ...
</table>

第一个想到的想法。我肯定有一些精心设计的方法来选择所讨论的元素(这意味着你只需要做$(selector).length),但我想不出一种方法

$("#parent_1").siblings().size() - 1
这:


翻译:匹配类
child
的所有元素,这些元素是
#parent_1
的兄弟,并且在其之后,但不是那些是
#parent_2

的兄弟,我认为最好的方法可能是手动计数。它会更快,因为当你知道你已经完成了计数时,你可以中断(如果你的桌子很大,这很有用)

var rowid1='parent_1';
var rowid2='parent_2';
var rows=$(“#”+rowid1.parent().find('tr');
var计数=0;
对于(var i=0;i
有些人在这里有一些很好的答案,我已经开始我的答案了,所以我只需添加它以获取更多信息

var rowid1 = 'parent_1';
var rowid2 = 'parent_2';

var rows = $("#"+rowid1).parent().find('tr');
var count = 0;

for (var i = 0; i < rows.size(); i++) {
    var el = rows.get(i);

    // Done counting
    if (el.id == rowid2) break;

    if (el.id != rowid1) {
        ++count;
    }
}

alert("There are " + count + " rows between");
$(文档).ready(函数(){
n=0;
var x=新数组(0,0,0);
$(“表tr”)。每个(功能(i)
{
if($(this.hasClass(“child”))
{
x[n]+=1;
}
其他的
{
n+=1;
}
});
对于(变量y=0;y

编辑顺便说一句,我的不在乎有多少个家长,只要阵列足够大,它就会继续计数。

这会让你得到你想要的

$(document).ready(function() {
    n = 0;
    var x = new Array(0,0,0);

    $("table tr").each(function(i)
    {
        if($(this).hasClass("child"))
        {
            x[n] += 1;
        }
        else
        {
            n += 1;
        }
    });

    for(var y = 0; y < x.length; y++)
    {
        alert(x[y]);
    }
});

这就是我希望有人会想到的。谢谢你教我一些东西!;)@Vlad:jQuery不使用XPATH。它是CSS 3选择器,不是XPATH,但你的观点是,这可能不是最有效的解决方案。@crescentfres-我的观点是正确的,对不起,我已经考虑过原型;但根据jQuery源代码,上面的选择器仍将比Chatuman的解决方案多做一个数量级的工作(即调用DOM API):@迈尔斯,对不起,我的想法是原型,它将尝试使用浏览器的内置xpath支持(document.evaluate功能)-1-性能差;扫描表中的所有行,即使您有100万行,并且最后只会计算两行(恰好在表的末尾)。您会有多少行,以至于计算它们会降低性能?我同意有更好的解决方案,但在这种情况下,我不会太担心O(n)。如果表很大,并且父_1接近表的末尾,仍然很糟糕!Chatuman的解决方案是简洁性和性能之间的最佳折衷方案。+1非常好!但是为什么要为中间日记而烦恼呢?直接点击API:document.getElementById('parent_2').rowIndex-document.getElementById('parent_1').rowIndex-1;回答得好。另外,@Vlad是对的:jQuery在这种情况下不会给你任何东西。+1 Vlad的评论!当然,这假设中间没有其他既不是“父”也不是“子”的行,这是可能的,但问题并不完全清楚。为什么它们的顺序很重要?
var rowid1 = 'parent_1';
var rowid2 = 'parent_2';

var rows = $("#"+rowid1).parent().find('tr');
var count = 0;

for (var i = 0; i < rows.size(); i++) {
    var el = rows.get(i);

    // Done counting
    if (el.id == rowid2) break;

    if (el.id != rowid1) {
        ++count;
    }
}

alert("There are " + count + " rows between");
$(document).ready(function() {
    n = 0;
    var x = new Array(0,0,0);

    $("table tr").each(function(i)
    {
        if($(this).hasClass("child"))
        {
            x[n] += 1;
        }
        else
        {
            n += 1;
        }
    });

    for(var y = 0; y < x.length; y++)
    {
        alert(x[y]);
    }
});
var childCount = ($('#parent_2').get(0).rowIndex - $('#parent_1').get(0).rowIndex) - 1;