我喜欢仅在“some”相对漂亮的url的情况下插入带有Jquery的字符串。
必须插入的字符串包含值'/ 1'或'/ 2'或'/ 3'
如此网址:
<a href="/whatever"> becomes
<a href="/1/whatever"> or <a href="/2/whatever"> etc.
但是像
这样的网址<a href="/1/whatever"> or
<a href="/2/whatever"> must keep unchanged
以下所有示例必须保持不变。
/whatever/whatever
/whatever/whatever/whatever
<img src="/img.png">
<img src="/whatever/img.png">
<img src="/whatever/whatever/img.png">
<img src="http://whatever.com/img.png">
<img src="http://whatever.com/whatever/img.png">
<a href="http://whatever.com></a>
<a href="http://whatever.com/whatever.whatever></a>
<a href="http://whatever.com/whatever/whatever.whatever></a>
答案 0 :(得分:1)
这不是最好的解决方案,因为它必须扫描页面中的每个元素...但是只需替换*
中的$("*")
来选择要定位的元素(例如{{1} })。
a, img
仅替换以$("*").each(function() { // selects every element
var el = this;
$.each(this.attributes, function() { // scans every attribute of the current element
if(this.specified) { // if this attribute has a proper value
if(this.value.match(/\//g).length == 1 && this.value.indexOf("/") == 0) {
// if the count of / chars is 1 and its index is 0 (first char)
var repl = "/1"; // get your value from the cookie here
this.value = repl + this.value;
}
}
});
});
开头并且只有一个/
(第一个)的值。
答案 1 :(得分:1)
您可以尝试以下代码:
$(document).ready(function(){
$ ("a").each(function(){
var url = $(this).attr("href"),
count = (url.match(/\//g) || []).length;
if(count == 1)
{
var cookieValue; //set your cookie value in this variable
$(this).attr("href","/"+cookieValue + $(this).attr("href"));
}
});
$ ("img").each(function(){
var url = $(this).attr("src"),
count = (url.match(/\//g) || []).length;
if(count == 1)
{
var cookieValue; //set your cookie value in this variable
$(this).attr("src","/" + cookieValue + $(this).attr("src"));
}
});
});
答案 2 :(得分:0)
这样的事情应该有效,
$('a[href]').each(function (index, element) {
var href = $(element).attr('href') || '';
if (href.match(/^\//) && !href.match(/^\/\d+\//)) {
// do whatever you do to decide what number to
// prepend with. I'm just going to use 1 all the time
$(element).attr('href', '/1' + href);
}
});
这假设您的所有相关链接都以/
开头,如果不是这样,您需要更改正则表达式。
href.match(/^\//)
确保href以/
开头
!href.match(/^\/\d+\//)
确保/
之后的内容不是一个完整的数值,后跟一个/
。
我使用了选择器a[href]
,因此它只抓取带有href
属性的链接。它现在不常见,但可能会有a
标记name
而不是href
。
那就是说,你可能不想使用这种客户端重写。如果您的用户正在运行NoScript或其他类似的安全产品,则可能会导致XSS攻击误报。如果可能,它可能应该在服务器端完成。