使用 jQuery 将项目附加到列表,但如果使用 Javascript 项目相同则使用索引
Appending items to a list using jQuery but use index if items are the same using Javascript
我知道的一种星云主题。
我在 Javascript 中有一个 "cart" 构建。我的例子是 JSFIDDLE.
在我的示例中,HTML 输出的左列中有一个输入框列表,由“+”和“-”按钮控制。
值相应增加和减少。
在右栏中,值受左侧输入内容的限制。这是 'Product'
在输出的底部,您将看到 "Cart"。
我正在根据 'Product' 选择将项目附加到 "Cart"。
我希望如果 'Product' 项相似,那么我只需要输出索引或数量,就像购物车一样。所以在我的例子中,如果购物车中有 2 个相同的产品,请将 2 个的数量放在列表项的旁边。
var increment;
var $InputValue = $('.ProductDetailPage').find("input[data-attendee='" + gaData + "']");
$InputValue.each(function (index) {
var oldThisVal = $(this).attr("value");
var newThisVal = oldThisVal;
var newBoxValInc = parseFloat(oldThisVal) + 1;
var newBoxValDec = parseFloat(oldThisVal) + 1;
var parentSection = $(this).parents("section").attr("id"),
productname = $(this).parents("section").find('h2').text(),
$list = $(this).parents("section").find(".CartList ul"),
//[data-attendee='" + gaData + "']
attendee = $(this).data("attendee"),
attendeeprice = $(this).data("attendeeprice"),
li = '<li class="animated bounceIn ' + attendee + parentSection + ' item' + $(this).val() + '"><span class="itemName">' + productname + '</span><span class="attendeeType"> ' + attendee + '</span><span class="itemPrice"> $' + attendeeprice + '</span></li>';
if ($button.text() == "+") {
increment = true;
} else {
increment = false;
}
if ($(this).val() > 0 && increment == true) {
$list.append(li);
var listItemsCount = li.length;
} else {
$list.find("li." + attendee + parentSection).last().remove();
}
编辑:添加了对所需输出的解释
所以我现在上面的代码只将项目附加到列表中,如下所示:
Adult Ticket
Junior Ticket
Junior Ticket
Junior Ticket
我想要的效果是:
1 - Adult Ticket
3 - Junior Ticket
我问这个问题是因为我不知道根据我已有的从哪里开始。我正在附加到列表中,但我不知道如何只添加一次项目,然后如果有多个相同的项目只在列表项目之前递增一个数字。
提前致谢。
现在编辑一切正常
演示:JSFIDDLE
我在使用 listItemsCount
时遇到了一些问题(而且我不了解该实用程序)。
但是,考虑到字符串attendee + parentSection
的唯一性,我在li
(初始等于1
)中添加了一个data-qta
attribute
。
时您单击按钮,脚本检查 class 是否已经存在,如果为假,它会检索数据 qta 和一些东西(检查 qta,如果为零则删除,更新 qta 和数字),否则它会添加一个新的 li
var sectionClass=$button.parent().parent().parent().parent().parent().parent().hasClass('ProductDetailPage'),
element = $list.children('li.' + attendee + parentSection),
qta = parseInt(element.attr('data-qta')),
relatedInput=$('.ProductDetailPage').find('input[data-attendee="' + attendee+'"]');
if(sectionClass==false ){
qta = parseInt(relatedInput.val());
if(qta>newVal){
relatedInput.val(newVal);
qta=newVal+1;
sectionClass=true;
}
}
if(sectionClass){
if($list.children('li.' + attendee + parentSection).length > 0) {
($button.text() == "+")? qta++:qta--;
if (qta > 0) {
element.attr('data-qta', qta);
element.children('.itemPrice').html(attendeeprice + ' x ' + qta);
} else {
element.remove();
}
} else {
var li = '<li class="animated bounceIn ' + attendee + parentSection + ' item' + $(this).val() + '" data-qta="1"><span class="itemName">' + productname + '</span><span class="attendeeType"> ' + attendee + '</span><span class="itemPrice"> $' + attendeeprice + '</span></li>';
$list.append(li);
}
calculateCart();
}
我知道的一种星云主题。
我在 Javascript 中有一个 "cart" 构建。我的例子是 JSFIDDLE.
在我的示例中,HTML 输出的左列中有一个输入框列表,由“+”和“-”按钮控制。
值相应增加和减少。
在右栏中,值受左侧输入内容的限制。这是 'Product'
在输出的底部,您将看到 "Cart"。
我正在根据 'Product' 选择将项目附加到 "Cart"。
我希望如果 'Product' 项相似,那么我只需要输出索引或数量,就像购物车一样。所以在我的例子中,如果购物车中有 2 个相同的产品,请将 2 个的数量放在列表项的旁边。
var increment;
var $InputValue = $('.ProductDetailPage').find("input[data-attendee='" + gaData + "']");
$InputValue.each(function (index) {
var oldThisVal = $(this).attr("value");
var newThisVal = oldThisVal;
var newBoxValInc = parseFloat(oldThisVal) + 1;
var newBoxValDec = parseFloat(oldThisVal) + 1;
var parentSection = $(this).parents("section").attr("id"),
productname = $(this).parents("section").find('h2').text(),
$list = $(this).parents("section").find(".CartList ul"),
//[data-attendee='" + gaData + "']
attendee = $(this).data("attendee"),
attendeeprice = $(this).data("attendeeprice"),
li = '<li class="animated bounceIn ' + attendee + parentSection + ' item' + $(this).val() + '"><span class="itemName">' + productname + '</span><span class="attendeeType"> ' + attendee + '</span><span class="itemPrice"> $' + attendeeprice + '</span></li>';
if ($button.text() == "+") {
increment = true;
} else {
increment = false;
}
if ($(this).val() > 0 && increment == true) {
$list.append(li);
var listItemsCount = li.length;
} else {
$list.find("li." + attendee + parentSection).last().remove();
}
编辑:添加了对所需输出的解释 所以我现在上面的代码只将项目附加到列表中,如下所示:
Adult Ticket
Junior Ticket
Junior Ticket
Junior Ticket
我想要的效果是:
1 - Adult Ticket
3 - Junior Ticket
我问这个问题是因为我不知道根据我已有的从哪里开始。我正在附加到列表中,但我不知道如何只添加一次项目,然后如果有多个相同的项目只在列表项目之前递增一个数字。
提前致谢。
现在编辑一切正常
演示:JSFIDDLE
我在使用 listItemsCount
时遇到了一些问题(而且我不了解该实用程序)。
但是,考虑到字符串attendee + parentSection
的唯一性,我在li
(初始等于1
)中添加了一个data-qta
attribute
。
时您单击按钮,脚本检查 class 是否已经存在,如果为假,它会检索数据 qta 和一些东西(检查 qta,如果为零则删除,更新 qta 和数字),否则它会添加一个新的 li
var sectionClass=$button.parent().parent().parent().parent().parent().parent().hasClass('ProductDetailPage'),
element = $list.children('li.' + attendee + parentSection),
qta = parseInt(element.attr('data-qta')),
relatedInput=$('.ProductDetailPage').find('input[data-attendee="' + attendee+'"]');
if(sectionClass==false ){
qta = parseInt(relatedInput.val());
if(qta>newVal){
relatedInput.val(newVal);
qta=newVal+1;
sectionClass=true;
}
}
if(sectionClass){
if($list.children('li.' + attendee + parentSection).length > 0) {
($button.text() == "+")? qta++:qta--;
if (qta > 0) {
element.attr('data-qta', qta);
element.children('.itemPrice').html(attendeeprice + ' x ' + qta);
} else {
element.remove();
}
} else {
var li = '<li class="animated bounceIn ' + attendee + parentSection + ' item' + $(this).val() + '" data-qta="1"><span class="itemName">' + productname + '</span><span class="attendeeType"> ' + attendee + '</span><span class="itemPrice"> $' + attendeeprice + '</span></li>';
$list.append(li);
}
calculateCart();
}