我循环遍历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
答案 0 :(得分:1)
text()
是一种方法,因此它需要括号,并返回连接的所有<option>
的文本。有更好的方法可以做到这一点,但是类似于你的方法可以通过使用变量来保存所有添加的文本,因此我们可以检查这个变量而不必检查<option>
元素:
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;
注意:我只使用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>');
});