jquery - jQuery - 按选定的 SKU 编号返回项目
问题描述
我正在尝试创建一个购买收据交互,其中用户clicks
一个SKU
数字和所有items
相同的列表SKU
都cloned
到一个列表以显示所有具有相同的匹配项目SKU
。
我不想附加原始列表项,而是希望将匹配结果返回到 ,modal
以便如果您单击不同SKU
的 ,结果将替换为最后一个 selected SKU
。
$("li a").click(function() {
var item = $(this).closest("li");
var sku = $(this).html();
var $parent = $("li#" + sku);
$parent = $('<li id="' + sku + '">')
.clone()
.appendTo(".modal");
});
ul {
height: 200px;
width: 200px;
margin-block-start: 0;
margin-block-end: 0;
}
li {
display: flex;
align-items: center;
border: 1px solid;
padding: 0.9rem 0rem;
}
li a:hover {
color: blue;
text-decoration: underline;
cursor: pointer;
}
.bullet {
margin: 0.3rem;
border-radius: 50%;
height: 25px;
width: 25px;
}
.blue {
background: blue;
}
.red {
background: red;
}
.green {
background: green;
}
.wrap {
display: flex
}
.modal {
height: 200px;
width: 200px;
border: 1px solid;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<ul>
<li>
<div class="bullet blue"></div>
<a>1234</a>
</li>
<li>
<div class="bullet red"></div>
<a>0808</a>
</li>
<li>
<div class="bullet green"></div>
<a>9011</a>
</li>
<li>
<div class="bullet blue"></div>
<a>1234</a>
</li>
<li>
<div class="bullet green"></div>
<a>9011</a>
</li>
</ul>
<div class="modal"></div>
</div>
解决方案
在这种情况下,我更喜欢使用data
属性而不是使用.html()
来获取值
data-sku
为每个添加<a>
其编号过滤
li
包含<a>
相同的sku
改变模式
.html()
小心克隆
li
s 并将其附加到div.modal
s<li>
中<div>
,这是一个无效的结构,因此您需要更改<div.modal
为,或者您可以在内部<ul>
创建一个并使用.. 然后您需要将in分开css 一个用于in ,另一个用于in<ul></ul>
div.modal
$('div.modal > ul').html(....)
<ul>
ul
.wrap
ul
.modal
$(document).on('click',".wrap > ul > li:not(.appended) > a",function() {
var sku = $(this).data('sku'); // get data sku
var FilTer = $('a[data-sku="'+sku+'"]').closest('li').clone(); // filter li which contains same data sku and get clone from it
$('.wrap > ul > li').removeClass('appended').filter(function(){ // remove the class `appended` from all the `wrap li`s then filter `li`
return $(this).find('a[data-sku="'+sku+'"]').length; // return just the li which contains the a with data-sku
}).addClass('appended'); // add class appended to this li
$('.modal > ul').html(FilTer); // change the modal html with the filtered html
});
ul {
height: 200px;
width: 200px;
margin-block-start: 0;
margin-block-end: 0;
}
li {
display: flex;
align-items: center;
border: 1px solid;
padding: 0.9rem 0rem;
}
li a:hover {
color: blue;
text-decoration: underline;
cursor: pointer;
}
.bullet {
margin: 0.3rem;
border-radius: 50%;
height: 25px;
width: 25px;
}
.blue {
background: blue;
}
.red {
background: red;
}
.green {
background: green;
}
.wrap {
display: flex
}
.modal {
height: 200px;
width: 200px;
border: 1px solid;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<ul>
<li>
<div class="bullet blue"></div>
<a data-sku="1234">1234</a>
</li>
<li>
<div class="bullet red"></div>
<a data-sku="0808">0808</a>
</li>
<li>
<div class="bullet green"></div>
<a data-sku="9011">9011</a>
</li>
<li>
<div class="bullet blue"></div>
<a data-sku="1234">1234</a>
</li>
<li>
<div class="bullet green"></div>
<a data-sku="9011">9011</a>
</li>
</ul>
<div class="modal">
<ul></ul>
</div>
</div>
说明为了避免每次单击时克隆和附加
您需要将类(例如:)设置
appended
为附加li
要使单击事件与附加的类一起工作,您需要
$(document).on('click',".wrap > ul > li:not(.appended) > a",function() {
最好使用
>
登录选择器仅获取li
anda
inwrap
元素
推荐阅读
- haskell - 范围类型变量代表类型变量而不是类型的意义
- c# - 以编程方式加载程序集及其依赖项时的奇怪行为
- c# - 如何触发显示 DownloadFileAsync 正在下载哪个文件的事件
- scala - scala,如何计算目录中的文件夹?
- oracle - JPA 自动为每个查询添加条件
- javascript - 如何在比较当前元素和下一个元素时迭代数组的最后一个元素?
- mysql - Mysql 通过命令行连接权限被拒绝,但工作台工作正常
- php - PHP计算时间并分为白天/夜间
- git - Intellij IDEA:存储库测试失败无法访问:错误设置证书验证位置
- karate - 使用输入作为 JsonArray 调用功能,而不会因转换问题而引发空手道异常