我正在尝试使用JQuery从动态表中提取数据,但我尝试过的每种方法都将值转换为其他值(下面的代码将返回“l”而不是N / AI所期望的。我有尝试使用.each和.map作为函数以及.val .html,你可以看到.text来提取数据。我被困在为什么以及我做错了什么。任何帮助都将不胜感激。< / p>
HTML
<table id="attendees" class="attendees">
<thead>
<tr style="border-bottom: double;border-color: #007fff" ;="">
<th>Full Name</th>
<th>Membership Type</th>
<th>Membership Expiration Date</th>
<th>Free Vouchers</th>
<th>Classes From Pack Remaining</th>
<th>Yelp Check in</th>
<th>Payment Option</th>
<th>Remove</th>
</tr>
</thead>
<tbody>
<tr class="data">
<td>Students Name</td>
<td>N/A</td>
<td>N/A</td>
<td>0</td>
<td>0</td>
<td>Yes</td>
<td>
<ul id="list">
<select id="payment" name="payment">
<option>Cash/Credit</option>
<option>Free Voucher</option>
<option>Yelp Check-in</option>
</select>
</ul>
</td>
<td>
<div><a href="#" class="remove"><p>Remove</p></a>
</div>
</td>
</tr>
</tbody>
</table>
JQuery的
$("#submit").live('click', function (e) {
$("#attendees tr.data").map(function (index, elem) {
var x = $(this);
var cells = x.find('td');
var $data = cells.text();
//alert($data[1]);
if ($data[1] == "N/A") {
alert(true);
}
});
e.preventDefault();
});
最终解决方案
首先感谢所有插话的人,老老实实地从每个人的回答中学到了一些东西。最后,这是我在下面解决的问题。事后我可能应该对我试图完成的事情进行更全面的描述。这是扫描多行数据并根据每行中找到的信息执行某些操作。为此,我被迫将tr
和td
.each
函数分开。这允许我逐行扫描并仍然获得个人数据
再次感谢大家的帮助,特别是@TechHunter
$("#submit").on('click', function (e) {
e.preventDefault();
$("#attendees tbody tr").each(function(i) {
var $data= [];
var x = $(this);
var cells = x.find('td');
$(cells).each(function(i) {
var $d= $("option:selected", this).val()||$(this).text();
$data.push($d);
});
if ($data[1] == "N/A") {
doSomething();
}
});
});
答案 0 :(得分:2)
最简单的答案是在需要检索值时添加一个类:
<强> HTML 强>
<table id="attendees" class="attendees">
<thead>
<tr style="border-bottom: double;border-color: #007fff" ;="">
<th>Full Name</th>
<th>Membership Type</th>
<th>Membership Expiration Date</th>
<th>Free Vouchers</th>
<th>Classes From Pack Remaining</th>
<th>Yelp Check in</th>
<th>Payment Option</th>
<th>Remove</th>
</tr>
</thead>
<tbody>
<tr class="data">
<td class="inputValue">Students Name</td>
<td class="inputValue">N/A</td>
<td class="inputValue">N/A</td>
<td class="inputValue">0</td>
<td class="inputValue">0</td>
<td class="inputValue">Yes</td>
<td>
<ul id="list">
<select id="payment" class="inputValue" name="payment">
<option>Cash/Credit</option>
<option>Free Voucher</option>
<option>Yelp Check-in</option>
</select>
</ul>
</td>
<td>
<div><a href="#" class="remove"><p>Remove</p></a>
</div>
</td>
</tr>
</tbody>
</table>
<强>的Javascript 强>
$("#submit").on('click', function (e) {
e.preventDefault();
var data = $("#attendees tr.data").map(function (index, elem) {
var ret = [];
$('.inputValue', this).each(function () {
var d = $(this).val()||$(this).text();
ret.push(d);
console.log(d);
if (d == "N/A") {
console.log(true);
}
});
return ret;
});
console.log(data);
console.log(data[0]);
});
它更容易,您只需要检索要检索的值。快速实施和维护。
答案 1 :(得分:1)
您应该使用on()
代替live()
(如果您的JQuery版本支持它) REASON 。刚刚修改你的jquery有点像这样,它工作:
<强> JQuery的 - 强>
$("#submit").on('click', function (e) {
$("#attendees tr.data").map(function (index, elem) {
$(this).find('td').each(function(){
var $data = $(this).html();
alert($data);
if ($data == "N/A") {
alert(true);
}
});
});
e.preventDefault();
});
<强>更新: - 强>
只需检查td
中是否有选择框。如果是,那么您可以获得它,如下所示:
if($(this).find("select").length > 0)
{
alert("found select")
alert($(this).find("select").val())
}
此处演示: - FIDDLE (更新的一个显示在选择框中选择的值)
答案 2 :(得分:0)
有些事情,假设您使用的是最新版本的jQuery,则需要将live()
替换为on()
。
此外,你需要遍历你的单元格以找到你正在寻找的东西,只需将它放在变量中就行不通。
$(document).on('click', '#submit' function (e) {
e.preventDefault();
//time to iterate over the cells
$("#attendees tr.data td").each(function(i) {
if ($(this).text() == "N/A") {
alert("Found it on cell index: " +i);
}
});
});
如果您想使用.map()
返回td
文字的数组,您可以执行以下操作:
var tdArray = $("#attendees tr.data td").map(function() {
return $(this).text();
}).get();