我是一个使用javascript的新手,我有一个问题。当我的变量实际包含值时,我尝试使用each
方法创建一个对象,如下所示:
$('.tab-content.tab-content-guide tr').each(function() {
var data = $(this);
var time = data.find('.time').text().trim();
var title = data.find('.showseries').text().trim();
var description = data.find('.series_descr').text().trim();
if (time) {
if (title) {
if (description) {
jsonObj.push({
'time': time,
'title': title,
'description' : description});
}
}
}
});
这里的问题是我的嵌套检查永远不会到达推送实际对象的点。如果我尝试使用console.log
进行调试,我会看到我的循环只执行第一次检查。任何人都可以解释为什么我的嵌套检查没有通过?
以下是html
代码的示例:
<div class="tab-content tab-content-guide">
<div role="tabpanel" class="tab-pane active" id="tab_636196032000000000">
<div class="table-responsive">
<table class='table' id="table_tab_636196032000000000">
<tbody id="table_tbody_tab_636196032000000000">
<tr data-index="0"><td>
<p class="time"><time>00:15</time></p>
</td><td>
<a href="/minisites/ola-xekolla/">
<img src="http://i-cdn.ant1.gr/dbd3f95d-68d9-4849-ad49-a62a00865173/logo_542_456_1.jpg?storage=cloud&w=140&h=140&mode=crop&scale=both&anchor=topcenter&quality=91" alt="Serie" />
</a>
</td><td>
<a href="/minisites/ola-xekolla/">
<h5 class="showseries">Some text title</h5>
<p class="series_descr">description text here</p>
</a><div class="greenbutton" onclick="javascript:window.open('/live')"><a href="#">
答案 0 :(得分:1)
注意可以返回的值,例如,空字符串的计算结果为false,或某些字符串的结果为0。
如果你想测试jquery元素的存在而不是值,你可以这样做:
var time = data.find('.time');
var title = data.find('.showseries');
var description = data.find('.series_descr');
if (time.length) {
if (title.length) {
if (description.length) {
jsonObj.push({
'time': time.text().trim(),
'title': title.text().trim(),
'description' : description.text().trim()});
}
}
}
否则你必须以不同的方式测试值,比如我不喜欢的详细解决方案:
var time = data.find('.time').text().trim();
if(typeof time !== 'undefined'){
//...
}
编辑:如果你是newbir我还推荐函数find,text等的jquery文档,检查返回的默认值是什么,正确使用等等
答案 1 :(得分:1)
运行此。
$(document).ready(function(){
var jsonObj = [];
$('.tab-content.tab-content-guide tr').each(function() {
var data = $(this);
var time = data.find('.time').text().trim();
var title = data.find('.showseries').text().trim();
var description = data.find('.series_descr').text().trim();
if (time) {
if (title) {
if (description) {
jsonObj.push({
'time': time,
'title': title,
'description' : description});
}
}
}
});
console.log(jsonObj);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tab-content tab-content-guide">
<div role="tabpanel" class="tab-pane active" id="tab_636196032000000000">
<div class="table-responsive">
<table class='table' id="table_tab_636196032000000000">
<tbody id="table_tbody_tab_636196032000000000">
<tr data-index="0"><td>
<p class="time"><time>00:15</time></p>
</td><td>
<a href="/minisites/ola-xekolla/">
<img src="http://i-cdn.ant1.gr/dbd3f95d-68d9-4849-ad49-a62a00865173/logo_542_456_1.jpg?storage=cloud&w=140&h=140&mode=crop&scale=both&anchor=topcenter&quality=91" alt="Serie" />
</a>
</td><td>
<a href="/minisites/ola-xekolla/">
<h5 class="showseries">Some text title</h5>
<p class="series_descr">description text here</p>
</a>
</td></tr>
</tbody>
</table>
</div>
</div>
&#13;
答案 2 :(得分:0)
不是真正的嵌套循环。而是嵌套了。
你确定你的选择器能得到什么吗? (这通常是我的问题,选择器返回一个空集合)
尝试推杆
console.log($('.tab-content.tab-content-guide tr').length)
在您的代码中检查您是否收到空集合。
如果长度> 0,那么,正如其他人建议检查你的测试变量以确保它们是真实的,例如
console.log(true&amp;&amp; time)