1

我需要遍历一个 div 列表。如果该列表中的 div 具有“活动”的类名,那么我需要将<p></p>特定 div 的标记内容保存到变量中。然后我需要将该变量的内容放在表单上隐藏输入元素的值中。例如,这里是一些示例 HTML:

<div class="names">
  <div class="one active">
    <p>A</p>
  </div>
  <div class="two active">
    <p>B</p>
  </div>
  <div class="three">
    <p>C</p>
  </div>
  <div class="four active">
    <p>D</p>
  </div>
  <div class="five">
    <p>E</p>
  </div>
  <div class="six active">
    <p>F</p>
  </div>
</div>

<form action="form.php" method="POST">
  <input type="hidden" name="list" id="list" value="">
</form>

由于四个 div 包含“活动”类,我需要将每个段落标记中的内容保存到要插入隐藏字段值的变量中。在此示例中,该字段的值将是 A、B、D、F。

我想过做这样的事情:

var userSelection = function() {
    $('.names div').each(function () {
        if($(this).hasClass('active')) {
            return $(this).text();
        }
    });
};

$('#list').val(userSelection);

首先,该代码不起作用,我什至不确定这是否是解决我的问题的最佳方法。其次,如果有人对如何完成我的需要有更好的想法,我很想听听。

4

3 回答 3

3

我会map()用来获取文本数组:

var textArr = $('.names div.active').map(function() {
    return $(this).text();
}).get();

从那里,您可以使用join()获取可以写入 DOM 的字符串:

var textString = textArr.join(', ');

完整的压缩代码:

var userSelection = function() {
    return $('.names div.active').map(function() {
        return $(this).text();
    }).get().join(', ');
};

$('#list').val(userSelection());
于 2013-10-10T22:03:02.537 回答
0

替代 Jason P 的答案是修改返回结果数组所需的内容,因为您将函数调用到具有多个结果的变量中:

var userSelection = function() {
    var output = [];
    $('.names div').each(function () {
        if($(this).hasClass('active')) {
            output.push( $(this).text().trim() );
        }
    });
    return output;
};

请参阅 JSFiddle。

于 2013-10-10T22:07:15.067 回答
0

工作小提琴:http: //jsbin.com/uQEJIkU/3/edit

$(document).ready(function() {  
  values = []  
  $("div.active > p").each( function() {  
    values.push($(this).text())    
  })    
})
于 2013-10-10T22:09:37.707 回答