我正在进行一个项目,该项目涉及返回所选复选框的id以及所选复选盒的相应文本区域字段中的文本。数据是动态显示的,到目前为止,我对复选框和文本区域的jquery pull都起作用:
var noteList = $("textarea[name='revokeNotes']").map(function(){
return this.value;
}).get().join();
var revokeList = $("input[name='revoke']:checked").map(function(){
return this.id;
}).get().join();
但我正在返回所有的notes字段,我不确定如何最好地迭代它们以找到正确的notes,因为它们的id不是顺序的,而是基于它们在表中的id。显示代码的最后一个版本如下:
<td><textarea name='"revokeNotes'" id='"".$v["id"]."'" cols='"30'"rows='"3'">".$v["notes"]."</textarea></td>
<td><input type='"checkbox'" id='"".$v["id"]."'" name='"revoke'" value='"".$v["id"]."'" /></td>
有没有办法从这种状态达到我的目标,或者我应该使用另一个jquery函数,类似于.map()?我曾想过使用复选框中的id字段来迭代所选的注释,并将它们推送到一个数组中,但我不确定1)这是否可行,2)如何做到这一点。
当我在ajax中传递一个值时,我需要以某种形式返回数据——数组或我可以在php中分解的东西来创建数组,因为没有设置每个用户将显示的最大或最小行数。地图一直在工作,直到我在上面加了一些逗号。
var noteList = $.map(
$("textarea[name='revokeNotes']").filter(function() {
return $(this).closest('td')
.next('td')
.find('input[type="checkbox"]')
.is(':checked');
}), function(el) {
return el.value;
}).join();
adeneo的答案很好,我只提出以下改进:
- 如果可能的话,请使用类选择器(如".revoke notes area"),因为它们比DOM+属性选择器更快
-
假设这是一个表,并且每行有一个文本区域复选框组合,则可以遍历树到最接近的
<tr>
,并根据复选框位于DOM中文本区域之后,将JS从中解耦。var filterMethod = function() { $(this).closest('tr').find('.revoke-checkbox').is(':checked'); }; var mapMethod = function(el) { return el.value; }; var nodeList = $.map($('.revoke-notes-area').filter(filterMethod), mapMethod);
没有理由不能或不应该将filter和map方法内联,我只是将它们拆分为变量,这样在这里更容易阅读。
你可以在这里查看我的代码笔:http://codepen.io/aaron/pen/eIpby.