jQuery从字符串中删除字符串不起作用

时间:2014-11-12 12:20:48

标签: javascript jquery

每次单击某个图像时,我都会获取一些信息,将该信息添加到字符串中,之后用新的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

如何删除第一部分?

2 个答案:

答案 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);