循环时在选择框中检查值

时间:2018-03-27 00:56:41

标签: javascript jquery html loops

我循环遍历Ajax结果并在var mLog=document.getElementById("log"); for (n = 2; (n<10000 && calc_power<power); n=n*2) { calc_power=chi_power(n,w,df,delta1,alfa); var message="n="+n+"<br>"; window.setTimeout(progress(mLog,message), 0); } function progress (mLog,message) { mLog.innerHTML+=message; } 框中填充JSON,但并非每个JSON结果都是唯一的,有些包含相同的值。

我想检查循环迭代时select框中是否已包含值,如果值相同,则不再打印,但由于某种原因,我{{1检查是不是有效?

select

3 个答案:

答案 0 :(得分:1)

text()是一种方法,因此它需要括号,并返回连接的所有<option>的文本。有更好的方法可以做到这一点,但是类似于你的方法可以通过使用变量来保存所有添加的文本,因此我们可以检查这个变量而不必检查<option>元素:

&#13;
&#13;
var result = ["first", "second", "first", "third", "second"];

var options = {};
for (var i = 0; i < result.length; i++) {
  var JsonResults = result[i];
  var sourcename = JsonResults; //JsonResults.Source.DataSourceName;

  if (!options[sourcename]) {
    $('.SelectBox').append('<option>' + sourcename + '</option>');
    options[sourcename] = true;
  }
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select class="SelectBox"></select>
&#13;
&#13;
&#13;

注意:我只使用var sourcename = JsonResults;进行演示。请改用原来的行。

答案 1 :(得分:0)

.text是一个函数,所以你必须调用它来取回选项中的文本

for (var i = 0; i < result.length; i++) {

  var JsonResults = result[i];
  var sourcename = JsonResults.Source.DataSourceName;

  if ($('.SelectBox').find('option').text() != sourcename) {
    $('.SelectBox').append('<option>' + sourcename + '</option>');                             
  }
}

答案 2 :(得分:0)

首先,jQuery方法是.text() - 它不是静态属性。另一方面,.find会为您提供每个<option>组合文本,这不是您想要的。

尝试在填充HTML之前重复删除对象:

const sourceNames = results.map(result => result.Source.DataSourceName);
const dedupedSourceNames = sourceNames.map((sourceName, i) => sourceNames.lastIndexOf(sourceName) === i);
dedupedSourceNames.forEach(sourceName => {
  $('.SelectBox').append('<option>' + sourceName + '</option>');
});