我想更改
的每个实例http[s]://www.mydomain.com/test/index.php?this_page=foo
到
https://www.mydomain.com/test/index.php?this_page=bar
我认为它必须能够用attr.replace
完成,但我无法弄清楚符号。我怎么能用jQuery或JavaScript做到这一点?
编辑:似乎每个人到目前为止要么缺少第一部分(http或https更改为https)或第二部分(foo to bar):)抱歉混淆
答案 0 :(得分:3)
你可以这样做:
$('a[href$="://www.mydomain.com/test/index.php?this_page=foo"]')
.attr('href', 'https://www.mydomain.com/test/index.php?this_page=bar');
attribute-ends-with selector [docs]是本机CSS3选择器,因此选择这些元素应该非常快。当然,您也可以使用http[s]
部分的正则表达式,例如.filter
,但这可能会更慢(也取决于您拥有的链接数量)。
如果网址包含其他参数,这些参数也应该是新网址的一部分,则必须单独处理每个链接:
// Using the attribute-contains selector now. This still assumes that
// `this_page=foo` is the first parameter in the URL
var pattern = /^https?:\/\/www.mydomain.com/test/index.php?this_page=foo(&|$)/;
$('a[href*="://www.mydomain.com/test/index.php?this_page=foo"]')
.attr('href', function(i, val) {
return val.replace(pattern, 'https://www.mydomain.com/test/index.php?this_page=bar$1');
});
如果this_page
可以位于网址中的任何位置,则可以获取包含this_page=foo
的所有链接和基本网址。仅当没有以foo
开头的其他页面值时才有效:
var pattern_page = /([?&])this_page=foo(&|$)/;
$('a[href*="://www.mydomain.com/test/index.php?"][href*="this_page=foo"]')
.attr('href', function(i, val) {
return val.replace('http:', 'https:')
.replace(pattern_page, '$1this_page=bar$2');
});
答案 1 :(得分:1)
一般语法如下:
$('a').prop('href', function(index, value) {
return newValue;
});
newValue
的计算将取决于您想要如何转换网址,例如:
$('a').prop('href', function(index, value) {
if (value.match(/=foo\??/) {
value = value.replace(/=foo\??/, '=bar?').replace(/^http:/, 'https:');
}
return value;
});
我使用.prop()
而不是.attr()
,因为您似乎想要访问完全限定的网址。使用属性而不是属性将为您提供 - 该属性不会始终包含URL方案。
答案 2 :(得分:0)
替换所有实例!!
$("a").each(function() {
if ($(this).attr("href") == 'http[s]://www.mydomain.com/test/index.php?this_page=foo') {
$(this).attr('href', 'https://www.mydomain.com/test/index.php?this_page=foo');
}
});
答案 3 :(得分:0)
假设这包含在链接的href
属性中,请尝试以下操作:
$("a").each(function() {
if($(this).attr("href").indexOf("http:") != -1) {
$(this).attr("href", $(this).attr("href").replace("http", "https"));
}
});
可能有更有效的方法,但这应该可以解决问题。
此致 理查德
答案 4 :(得分:0)
这将在整个页面中用https替换锚点中的所有http引用。
$.each($('a'), function(i,v){
var oldULR = $(v).attr('href');
var newURL = oldULR.replace('http', 'https');
$(this).attr('href', newURL);
});
FIDDLE: http://jsfiddle.net/bkNLD/
答案 5 :(得分:0)
在纯JavaScript中,您可以使用:
var links = document.links;
for (var i = 0, len = links.length; i < len; i++) {
href = links[i].href;
if (href.indexOf('https') == -1) {
links[i].href = href.replace('http', 'https');
href = links[i].href;
}
if (href.split('=')[1] == 'foo'){
links[i].href = href.replace('foo','bar');
}
}
在上文中,我曾经假设两个替代品不一定是相互依赖的,可能是错误的。如果是,那就变得更简单了:
var links = document.links;
for (var i = 0, len = links.length; i < len; i++) {
href = links[i].href;
if (href.indexOf('https') == -1 && href.split('=')[1] == 'foo') {
links[i].href = href.replace('http', 'https');
links[i].href = href.replace('foo','bar');
}
}
答案 6 :(得分:0)
对于其他任何人发现这个并且和我一样多的菜鸟......这是我最终使用的解决方案。
$(document).ready(function(){
$('a[href*="this_page=foo"]').prop('href', function(index, value) {
return value.replace(/=foo/, '=bar').replace(/^http:/, 'https:');
});
});
它是Felix Kling和Alnitak的组合,我非常感谢他们。