jquery 动态添加select 如何避免重复添加(去重)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery 动态添加select 如何避免重复添加(去重)相关的知识,希望对你有一定的参考价值。
我用ajax添加下拉栏:success : function(data) var obj = eval(data);for ( var i = 0; i < obj.length; i++) $(".city").append("<option value='"+obj[i].city+"'>"+obj[i].city+"</option>");$(".city").append("")可以添加数据,但是会添加很多重复数据我试过在for循环后写://去重$(".city option").each(function() var getText = $(this).text(); if($(".city option:contains("+getText+")").length > 1)$(".city option:contains("+getText+"):gt(0)").remove(); );但是只有第一条数据有效果 其他的动态添加select效果也没了 删掉去重 所以数据都有动态下拉列表值(数据重复添加)
1、确定当前需要添加元素的text以及对应的value2、获取当前下拉框中所有的option元素数组optionArr,可以通过$('#citySelect option')获取元素集合。
3、遍历optionArr,判断需要添加的text或者value是否和optionArr相同,相同则不添加,没有重复则添加。
示例:
<select id='citySelect'>
<option value='beijing'>北京</option>
<option value='shanghai'>上海</option>
</select>
方法:
<script>
function addCity(value, text)
var optionArr = $('#citySelect option');
for(var i=0;i<optionArr.length;i++)
if(optionArr[i].text == text || optionArr[i].value == value)
return false;
var addOption = "<option value='" + value + "'>" + text + "</option>";
$('#citySelect').append(addOption);
</script> 参考技术A jquery去重复 如何去除select控件重复的option
方法也比较多,这里提供一个使用jquery选择器 :contains 的方法:
$(":contains(text)"); // 选取包含指定字符串的元素
这样就可以选出包含重复字符串的option元素,然后将其删掉追问
您好 麻烦您可以写一个实例吗
参考技术B 添加之前先清除select标签中的内容,$(".city").html("");然后再append();就不会有重复数据了 参考技术C 添加之前做一件事,判断是否已经存在名称。判断的方式很多,比较简单的就是jquery获取option集合,循环判断文本是否相同,相同则已经存在,提示不能添加。或者用contains,fiter等选择器,具体用法教程很多也很简单。 参考技术D //每次添加前清空一次success : function(data)
var obj = eval(data);
if(obj.length > 0)
$(".city").html("");
for ( var i = 0; i < obj.length; i++)
...追问
还是有重复的
追答那就是data中的存在重复数据可以
var obj = eval(data);var citys = [];
var city_set;
for(var i in obj)
citys.push(obj[i].city);
city_set = new Set(citys); //去重
city_set.forEach(function(c)
$(".city").append("<option value='"+c+"'>"+c+"</option>");
);追问
这样的话 不就一直循环下去了 每执行一次把数据库所有的city带出来了 而且 叠加的越来越多
如何避免在 SQL Server 中重复插入动态值
【中文标题】如何避免在 SQL Server 中重复插入动态值【英文标题】:How to avoid duplicate insert of dynamic values in SQL server 【发布时间】:2014-05-09 18:52:16 【问题描述】:我想编写一个查询来插入动态值,如果它们已经存在或不存在。到目前为止,我已经尝试过了。
INSERT MTB_AML..tb_aml_codes (aml_code, aml_desc)
SELECT 'NRA', 'Non-Resident Alien'
UNION
SELECT 'DOM', 'Resident Alien'
FROM MTB_AML..tb_aml_codes t1
WHERE t1.aml_code NOT IN (SELECT t2.aml_code from MTB_AML..tb_aml_codes t2)
但这只会返回上层选择(表中已经存在)。我做错了什么?
【问题讨论】:
有什么特殊原因需要使用 UNION 吗? @OtávioDécio 我还能如何插入动态值?我没有将它们存储在任何可以使用列名的表中。 您是否假设WHERE
应用于UNION
的结果,而不仅仅是第二个select 语句?
@hatchet 即使我单独申请 where 条件,也没有解决目的。我认为我无法通过使用 INSERT 到 SELECT... 来控制非重复信息的插入以获取硬编码值。
【参考方案1】:
我认为您遇到的问题是,在您的版本中,WHERE 子句仅适用于 UNION 子句中的最后一个 Select
获取你想要的记录
SELECT 'NRA' AS aml_code, 'Non-Resident Alien' AS aml_desc
UNION
SELECT 'DOM' AS aml_code, 'Resident Alien' AS aml_desc
然后将它们包装为子查询(在示例中别名为 [src]),然后您可以检查哪些在目标表中没有匹配的键(别名为 [dst])
INSERT MTB_AML..tb_aml_codes (aml_code, aml_desc)
SELECT src.aml_code, src.aml_desc
(
SELECT 'NRA' AS aml_code, 'Non-Resident Alien' AS aml_desc
UNION
SELECT 'DOM' AS aml_code, 'Resident Alien' AS aml_desc
) src
WHERE src.aml_code NOT IN (SELECT dst.aml_code from MTB_AML..tb_aml_codes dst)
我个人会用这样的左连接来做,但这取决于你
INSERT MTB_AML..tb_aml_codes (aml_code, aml_desc)
SELECT src.aml_code, src.aml_desc
FROM
(
SELECT 'NRA' AS aml_code, 'Non-Resident Alien' AS aml_desc
UNION
SELECT 'DOM' AS aml_code, 'Resident Alien' AS aml_desc
) src
LEFT JOIN MTB_AML..tb_aml_codes dst
ON dst.aml_code = src.aml_code
WHERE dst.aml_code IS NULL
两者都可以,但如果您必须匹配多列键,则需要使用 join 方法
【讨论】:
非常感谢!这就是我需要的。你是男人!【参考方案2】:您正在对结果集的值进行硬编码,用引号引起来表示文字值,您必须需要 COLUMN 名称。
SELECT 'DOM', 'Resident Alien'
您需要这样的 SELECT:
SELECT T1.ColName, T1.AndAnotherColName
....
【讨论】:
谢谢,但这就是重点。只有当我知道它不存在时,我才必须在表中插入一个硬编码值。我不确定是否/如何做到这一点。 你需要展示数据示例,你的问题写得不好。【参考方案3】:您正在插入与表MTB_AML..tb_aml_codes
无关的静态数据。所以你的插入查询可以简化如下
INSERT MTB_AML..tb_aml_codes (aml_code, aml_desc)
VALUES ('NRA', 'Non-Resident Alien'),('DOM', 'Resident Alien')
编辑:
然后您需要检查这些值是否存在并相应地进行插入,如下所示
IF NOT EXISTS
(select 1 from MTB_AML..tb_aml_codes where aml_code in('NRA','DOM')
and aml_desc in ('Non-Resident Alien','Resident Alien'))
BEGIN
INSERT INTO MTB_AML..tb_aml_codes (aml_code, aml_desc)
VALUES ('NRA', 'Non-Resident Alien'),('DOM', 'Resident Alien')
END
【讨论】:
感谢 Rahul,但我如何确保我没有插入重复记录?【参考方案4】:我认为MERGE
语句可以满足您的需求。它简洁地完成了你想做的事情。
MERGE MTB_AML..tb_aml_codes AS dest
USING (
-- place here whatever you want to insert if not already present
-- I'm using something like what you have in your question since
-- that's your example
SELECT 'NRA', 'Non-Resident Alien'
UNION
SELECT 'DOM', 'Resident Alien'
) AS src
ON dest.aml_code = src.aml_code
WHEN NOT MATCHED BY TARGET THEN
INSERT (aml_code, aml_desc)
VALUES (src.aml_code, src.aml_desc)
;
【讨论】:
非常感谢@hatchet!以上是关于jquery 动态添加select 如何避免重复添加(去重)的主要内容,如果未能解决你的问题,请参考以下文章