嵌套检查Javascript不起作用

时间:2017-01-10 20:41:19

标签: javascript

我是一个使用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="#">

3 个答案:

答案 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)

运行此。

&#13;
&#13;
$(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;
&#13;
&#13;

答案 2 :(得分:0)

不是真正的嵌套循环。而是嵌套了。

你确定你的选择器能得到什么吗? (这通常是我的问题,选择器返回一个空集合)

尝试推杆     console.log($('.tab-content.tab-content-guide tr').length)

在您的代码中检查您是否收到空集合。

如果长度> 0,那么,正如其他人建议检查你的测试变量以确保它们是真实的,例如

console.log(true&amp;&amp; time)