比较字符串会产生错误的结果

时间:2017-04-15 20:09:23

标签: javascript jquery

我让用户输入input中的单词或句子,这将与其他字符串进行比较。然后我在每个字符串结果上运行.each以查看是否存在匹配的字符串,如果是,则继续其他方式删除一些元素:



var text2;
var text2B;
text2 = jQuery('#usp-title').val();
text2B = text2.toLowerCase();
jQuery("#datafetch").html(data).promise().done(function() {
  jQuery("#datafetch ul li h2 a").each(function() {
    var $this = jQuery(this);
    if ($this.text().toLowerCase().trim() !== text2B.trim()) {
      $this.parent().parent().remove();
      jQuery(".jumbotron").remove();
      jQuery("#componi").removeAttr("disabled", "disabled").show();
    }
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="#usp-title" type="text">
&#13;
&#13;
&#13;

但无论如何jQuery(".jumbotron").remove();正在发生。我知道,因为所有结果都已使用$this.parent().parent().remove();删除,我看不到它们,只留下正确匹配的字符串结果。

data variable提供了一个项目列表:

<div id="#datafetch">
  <ul>
    <li>
      <h2>
        <a>Lorem</a>
      </h2>
    </li>
    <li>
      <h2>
        <a>Ipsum</a>
      </h2>
    </li>
    <li>
      <h2>
        <a>Dolor</a>
      </h2>
    </li>
  </ul>

我甚至尝试过:

if ($thisText !== text2B.trim()) {
        jQuery(".jumbotron").hide();
        $this.parent().parent().remove();
        jQuery("#componi").removeAttr("disabled", "disabled").show();
      } else {
        jQuery(".jumbotron").show();
  }

1 个答案:

答案 0 :(得分:1)

此代码中存在登录漏洞。 Jumbotron被删除总是因为单个不匹配(在任何字符串上)将其删除。

在更新的代码中(使用hide()和show())存在类似的问题。即使发生匹配并显示了jumbotron,下一次比较也会再次隐藏它。

解决方案是首先(在每个()循环之前)隐藏jumbotron并仅在匹配发生时显示它。