超链接替代文本替换

hyperlink alternate text replacement

目前我得到了这段代码,它用超链接替换了跨度 class。超链接包含缩写,超链接的备用文本包含相同的缩写。现在我想做的是,以某种方式替换超链接的替代文本中的第二个缩写。所以没有 "click here to visit + 'name of'abbreviation" 而是一个别名。所以如果缩写是ggl,别名应该是google。但是超链接不应该使用这个别名。有人能帮我吗?谢谢

(function($) {
    var number = "1234567";

    function linkBuilder(abbreviation) {
        return "<a href='https://www.test.com/" + abbreviation + "?sitenumber=" + number + "default'>Click here to visit " + abbreviation + "</a>";
    }

    function linkBuilder2(abbreviation2) {
        return "<a href='https://www.test.com/" + abbreviation2 + "?sitenumber=" + number + "default'>Click here to visit " + abbreviation2 + "</a>";
    }
    jQuery(document).ready(function() {
        var fl = $(".first-link");
        if (fl.length > 0) {
            fl.html(linkBuilder(fl.data("abbreviation")));
        }
        var sl = $(".second-link");
        if (sl.length > 0) {
            sl.html(linkBuilder2(sl.data("abbreviation2")));
        }
    });
})(jQuery);

你可能想要的是这样的:

function linkBuilder(abbreviation, alias) {
    return "<a href='https://www.test.com/" + abbreviation + "?sitenumber=" + number + "default'>Click here to visit " + alias + "</a>";
}

只需将您想要的 link 显示名称作为第二个参数传递。

这是一个有效的 jsfiddle:

https://jsfiddle.net/e7qdx031/1/

linkBuilder() 应该可以重复使用,正如 kalsowerus 提到的那样。

另外应该提到的是下面的代码returns是一个元素的集合,而不只是一个元素。

var fl = $(".first-link");
...
var sl = $(".second-link");

如果页面上有多个.first-link 类,您提供的代码将无法正常运行。因此,我将使用 $.each() 和 运行 对每个元素分别进行 linkBuilder() 函数的迭代。

至于 linkBuilder 函数,我会将其修改为接受元素对象,然后读取属性以检索别名和名称。全名是您似乎表示需要的东西,但代码中没有。

(function($) {
    var number = "123456";

    function linkBuilder($obj) {
        var abbreviation = $obj.data('abbreviation');
        var name = $obj.data('name');
        return "<a href='https://www.test.com/" + abbreviation + "?sitenumber=" + number + "default'>Click here to visit " + name + "</a>";
    }

    jQuery(document).ready(function() {
        $('.first-link, .second-link').each(function(index, obj){
            $(obj).html(linkBuilder($(obj)));
        });
    });
})(jQuery);