每次单击某个图像时,我都会获取一些信息,将该信息添加到字符串中,之后用新的URL替换当前的URL。到目前为止,这是我的代码:
jQuery(document).ready(function(){
var kleuren = [];
jQuery('.swatch-category-container img').click(function(){
var kleur = jQuery(this).attr('title');
console.log("Selected kleur: " + kleur);
var link = jQuery(this).closest('.popup').find('.photo a').prop('href');
kleuren.push(kleur);
console.log(kleuren);
console.log(kleuren.length);
console.log("Fetched link: " + link);
var length = kleuren.length -1;
var avoid ="?kleur="+kleuren[length];
console.log("Remove string: " + avoid);
var news_link = link.replace(avoid,'');
var new_link = news_link + "?kleur="+kleur;
console.log("Cut string: " + news_link);
jQuery('.photo').find('.sendkleur').attr("href", new_link);
});
});
这样可以正常工作,但以前的数据不会被删除。
例如
单击第一个图像时,kleur = zwart
该信息将放入网址中。
但是,当用户点击其他图片后,该网址将显示为?kleur=zwart?kleur=beige
,而不仅仅是?kleur=beige
如何删除第一部分?
答案 0 :(得分:0)
虽然我们可以调试替换逻辑,但我认为我的方式完全不同:在链接上有一个data-*
属性,它给出了没有kleur
的原始版本,然后只是重用那个;您甚至可以在第一次通过时初始化它,这样您就不必更新标记了:
var linkElement = jQuery(this).closest('.popup').find('.photo a');
var link = linkElement.attr("data-rawhref");
if (!link) {
link = linkElement.attr("href");
linkElement.attr("data-rawhref", link);
}
// ...add kleur to `link`
如果你不需要它实际上是一个属性,你可以改用data
,但由于链接只是一个字符串,因此可能没有真正的优势。< / p>
var linkElement = jQuery(this).closest('.popup').find('.photo a');
var link = linkElement.data("rawhref");
if (!link) {
link = linkElement.attr("href");
linkElement.data("rawhref", link);
}
// ...add kleur to `link`
但您的代码存在的问题是您在kleur
中使用当前 avoid
而不是旧代码:
kleuren.push(kleur); // Pushes the current kleur at the end
var length = kleuren.length -1; // Will be the index of the *current* kleur
var avoid ="?kleur="+kleuren[length];// ...and so this is looking for the wrong one
代替:
var avoid, new_link;
if (kleuren.length) {
avoid = "?kleur="+kleuren[kleuren.length - 1];
new_link = link.replace(avoid,'') + "?kleur="+kleur;
} else {
new_link = link + "?kleur="+kleur;
}
kleuren.push(kleur);
假设您确实需要一系列先前选择的颜色。如果你不这样做,只需使用一个变量:
var avoid, new_link;
if (letzteKleur) { // Meant to be "last color", my German is non-existant
avoid = "?kleur="+letzteKleur;
new_link = link.replace(avoid,'') + "?kleur="+kleur;
} else {
new_link = link + "?kleur="+kleur;
}
letzteKleur = kleur;
答案 1 :(得分:0)
也许是因为你从不在阵列上弹出一个? 你的日志是怎样的? 您似乎尝试替换当前值而不是之前的值。
kleuren.push(kleur);
console.log(kleuren);
console.log(kleuren.length);
console.log("Fetched link: " + link);
var length = kleuren.length -1;
var avoid ="?kleur="+kleuren[length];
也许这样做(当然只有在数组中至少有一个项目时)
console.log(kleuren);
console.log(kleuren.length);
console.log("Fetched link: " + link);
var length = kleuren.length -1;
var avoid ="?kleur="+kleuren[length];
kleuren.push(kleur);