Javascript 如何防止重复
我试图弄清楚如何让它循环通过UL中的数据(每个Javascript 如何防止重复,javascript,jquery,html,Javascript,Jquery,Html,我试图弄清楚如何让它循环通过UL中的数据(每个li),并防止它复制任何先前存在的选择 <script type="text/javascript" language="javascript"> // Long version function HandlerCharacters() { var characterid = $('#charactersdrop option:selected').val(); var characterName = $('#charactersdr
li
),并防止它复制任何先前存在的选择
<script type="text/javascript" language="javascript">
// Long version
function HandlerCharacters() {
var characterid = $('#charactersdrop option:selected').val();
var characterName = $('#charactersdrop option:selected').text();
if( characterid > 0 ) {
// Create the anchor element
var anchor = $( '<a href="#">Remove</a>' );
// Create a click handler for the anchor element
anchor.click( function() {
$( this ).parent().remove();
return false; // makes the href in the anchor tag ignored
} );
// Create the <li> element with its text, and then append the anchor inside it.
var li = $( '<li>' + characterName + ' </li>' ).append( anchor );
li.data( 'characterid', characterid );
// Append the new <li> element to the <ul> element
$( '#characterlist' ).append( li );
}
}
</script>
//长版本
函数HandlerCharacters(){
var characterid=$('#charactersdrop选项:选定').val();
变量characterName=$('#charactersdrop选项:选定')。text();
如果(字符ID>0){
//创建锚元素
var-anchor=$('');
//为锚元素创建单击处理程序
锚定。单击(函数(){
$(this.parent().remove();
return false;//使锚标记中的href被忽略
} );
//创建带有文本的元素,然后在其中附加锚点。
var li=$(' '+characterName+' ')。追加(锚定);
li.数据('characterid',characterid);
//将新的元素附加到元素
$(“#字符列表”).append(li);
}
}
据我所知,只有当新的字符
不在列表中另一个li
的数据中时,您才尝试插入新的li
。如果是这样,那么您可以编写如下函数:
function isDupe(which) {
var result = false;
$('ul#the_list li').each( function(i,e) { // look at all list elements
if ( $(e).data('characterid') == which ) { // compare to argument
result = true; // matched!
return false; // break out of .each()
}
});
return result;
}
if( !isDupe(characterid) ){
// do your checks
// make your li
// append to your list
}
然后您可以像这样包装li
创建代码:
function isDupe(which) {
var result = false;
$('ul#the_list li').each( function(i,e) { // look at all list elements
if ( $(e).data('characterid') == which ) { // compare to argument
result = true; // matched!
return false; // break out of .each()
}
});
return result;
}
if( !isDupe(characterid) ){
// do your checks
// make your li
// append to your list
}
这里有一个简化的例子:这很好。有问题吗?为什么要创建同一个jQuery对象两次?我没有其他方法可以添加到现有函数中,让它循环执行检查?正如我在回答的底部所提到的,只需定义上面的函数(如果愿意,可以在函数中定义它),然后在条件语句中包装您的LI创建片段的内脏。例如,您可以简单地将
if(characterid>0)
更改为'if(characterid>0&&!isDupe(characterid))`。我不知道你的页面和代码的其余部分是什么样子的,但我的意思是(可能是不工作的,只是修改你的代码):这样我就可以学习和理解其中的一部分。“e”和“i”值代表什么?函数有两个参数:索引和元素。我只是简单地用“I,e”。对于通过each()
的每次迭代,e
是当前元素(因此,在本例中,
s中的一个),而i
是循环中当前行程的索引(从零开始)。这是有意义的。谢谢你花点时间给我解释一下。我一直在研究如何将li.data的最终结果作为参数传递给数据字符串进行表单处理,但我找不到任何有助于我的方法。然而,另一件让我困扰的事情是,当我这样做时,我需要指出li数据中的第一个值,因为我将在我的流程数据库文件中对该值进行特殊处理,因此我不确定是否在某一点上指出该值,或者我是否可以将其保留到流程页面。