JQUERY在相对漂亮的URL中插入字符串

时间:2014-11-08 08:09:09

标签: jquery pretty-urls

我喜欢仅在“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>

3 个答案:

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

Fiddle

这假设您的所有相关链接都以/开头,如果不是这样,您需要更改正则表达式。

href.match(/^\//)确保href以/开头 !href.match(/^\/\d+\//)确保/之后的内容不是一个完整的数值,后跟一个/

我使用了选择器a[href],因此它只抓取带有href属性的链接。它现在不常见,但可能会有a标记name而不是href

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