1

我喜欢仅在“一些”相对漂亮的 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>
4

3 回答 3

1

这并不是真正的最佳解决方案,因为它必须扫描页面中的每个元素......但是只需替换*in$("*")以选择要定位的元素(例如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;
      }
    }
  });
});

仅替换以一个开头/且只有一个/(第一个)的值。

于 2014-11-08T09:03:16.087 回答
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"));
        }
    });
  });
于 2014-11-08T09:21:35.103 回答
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 以 a 开头,/ !href.match(/^\/\d+\//)确保之后的/不是一个完整的数字值,后跟 a /

我使用了选择器a[href],所以它只抓取带有href属性的链接。今天它并不常见,但可以有一个带有 a和 no的a标签。namehref

也就是说,您可能不想使用这种客户端重写。如果您的用户正在运行 NoScript 或其他类似的安全产品,则可能会导致 XSS 攻击的误报。如果可能的话,它可能应该在服务器端完成。

于 2014-11-08T09:56:49.593 回答