在第二个textarea之后获取下一个所有输入

时间:2015-01-07 05:44:37

标签: javascript jquery html

我的javascript中有一个变量假设var oneTR= $("#Grp1");,我可以使用this solution将3个TR的组合并到Combined行。

我想要的是:

  • 在一个合并行中的第二个inputs之后获取所有textarea

     <table id="t01">
      <tr>
        <th>HEAD 1</th>
        <th>HEAD 2</th>
        <th>HEAD 3</th>
      </tr>
      <tr id="Grp1">
        <td>Grp1 data</td>
        <td>Grp1 data</td>
        <td>Grp1 data</td>
      </tr>
      <tr>
        <td>Grp1 data</td>
        <td>Grp1 data</td>
        <td><textarea></textarea></td>
      </tr>
      <tr>
        <td>Grp1 data</td>
        <td><textarea></textarea></td>
        <td><input type="text"><input type="text"></td>
        <td><input type="text"><input type="text"></td>
        <td><input type="text"></td>
      </tr>
      <tr id="Grp2">
        <td>Grp2 data</td>
        <td>Grp2 data</td>
        <td>Grp2 data</td>
      </tr>
      <tr>
        <td>Grp2 data</td>
        <td>Grp2 data</td>
        <td><textarea></textarea><input type="text"></td>
      </tr>
      <tr>
        <td><textarea></textarea></td>
        <td><input type="text"><input type="text"></td>
        <td><input type="text"><input type="text"></td>
        <td><input type="text"></td>
      </tr>
      <tr id="Grp3">
        <td>Grp3 data</td>
        <td>Grp3 data</td>
        <td>Grp3 data</td>
      </tr>
      <tr>
        <td>Grp3 data</td>
        <td>Grp3 data</td>
        <td><textarea></textarea><input type="text"></td>
      </tr>
      <tr>
        <td><textarea></textarea></td>
        <td><input type="text"><input type="text"></td>
        <td><input type="text"><input type="text"></td>
        <td><input type="text"></td>
      </tr>
    </table>
    

我试过这样的解决方案:

 var finalinps = oneTR.add(oneTR.nextUntil("#Grp2")).find("textarea").eq(1).nextAll(":input");

 console.log("finalinps: ", finalinps.length); //finalinps: 0

但这不起作用。这是JSFiddle

注意 - 我正在使用此行textarea,但不只是inputs

oneTR.add(oneTR.nextUntil("#Grp2")).find("textarea").eq(1)

3 个答案:

答案 0 :(得分:2)

修改,更新

尝试

// updated to return `oneTR1 , 6 `input elements` following second `textarea`
var finalinps = oneTR.add($("#t01 input").filter(function(i, el) {
                    return $("#t01 textarea:eq(1)").parents("tr").index() >=  
                           $(el).parents("tr").index()})
                );

var oneTR = $("#Grp1");

//var finalinps = oneTR.add(oneTR.nextUntil("#Grp2")).find("textarea").eq(1).nextAll(":input");



var finalinps = oneTR.add($("#t01 input").filter(function(i, el) {
  return $("#t01 textarea:eq(1)").parents("tr").index() >= $(el).parents("tr").index()
}));

console.log("finalinps: ", finalinps.length, finalinps);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="t01">
  <tr>
    <th>HEAD 1</th>
    <th>HEAD 2</th>
    <th>HEAD 3</th>
  </tr>
  <tr id="Grp1">
    <td>Grp1 data</td>
    <td>Grp1 data</td>
    <td>Grp1 data</td>
  </tr>
  <tr>
    <td>Grp1 data</td>
    <td>Grp1 data</td>
    <td>Grp1 data</td>
  </tr>
  <tr>
    <td>Grp1 data</td>
    <td>
      <textarea></textarea>
    </td>
    <td>
      <input type="text">
      <input type="text">
    </td>
    <td>
      <input type="text">
      <input type="text">
    </td>
    <td>
      <input type="text">
    </td>
  </tr>
  <tr id="Grp2">
    <td>Grp2 data</td>
    <td>Grp2 data</td>
    <td>Grp2 data</td>
  </tr>
  <tr>
    <td>Grp2 data</td>
    <td>Grp2 data</td>
    <td>
      <textarea></textarea>
      <input type="text">
    </td>
  </tr>
  <tr>
    <td>
      <textarea></textarea>
    </td>
    <td>
      <input type="text">
      <input type="text">
    </td>
    <td>
      <input type="text">
      <input type="text">
    </td>
    <td>
      <input type="text">
    </td>
  </tr>
  <tr id="Grp3">
    <td>Grp3 data</td>
    <td>Grp3 data</td>
    <td>Grp3 data</td>
  </tr>
  <tr>
    <td>Grp3 data</td>
    <td>Grp3 data</td>
    <td>
      <textarea></textarea>
      <input type="text">
    </td>
  </tr>
  <tr>
    <td>
      <textarea></textarea>
    </td>
    <td>
      <input type="text">
      <input type="text">
    </td>
    <td>
      <input type="text">
      <input type="text">
    </td>
    <td>
      <input type="text">
    </td>
  </tr>
</table>

答案 1 :(得分:1)

试试这个:

工作Demo

oneTR.add(oneTR.nextUntil("#Grp2")).find("textarea").eq(1).parents('tr').find('input');
console.log("finalinps: ", finalinps.length);

答案 2 :(得分:0)

您可以使用以下js:

获取第二个文本区域旁边的文本输入元素的长度
//get the index of 2nd textarea tr
var curIndex = $("table textarea:eq(1)").closest("tr").index();

//get the length of text input elements
var txtlen = $("table tr:eq("+curIndex+")").nextAll('tr').andSelf().find("input[type=text]").length;

alert(txtlen);

演示链接:http://jsfiddle.net/84wk1kry/2/