6

What am I doing wrong?

  1. Only on pages with the URL location of "/MyWebsite/Example.aspx" append "?template=PW"
  2. But only to links that contain "/HelloWorld/default.aspx"

There is no ID or classes associated to this link, so I have to look for the URL.

This is my code, but the links are not updating.. I know I'm close!

$(document).ready(function(){
    if (document.location.href.indexOf('/MyWebsite/Example.aspx') > 0)  
        {
            $('a[href*="/HelloWorld/default.aspx"]').append("href",$("?template=PW"))
        }
});
Evan
  • 3,411
  • 7
  • 36
  • 53

5 Answers5

5
$(document).ready(function(){
    if (document.location.href.indexOf('/MyWebsite/Example.aspx') > 0)  
        {
            var $el = $('a[href*="/HelloWorld/default.aspx"]');
            $el.attr("href", $el.attr("href")+ "?template=PW");
        }
});
Okan Kocyigit
  • 13,203
  • 18
  • 70
  • 129
  • I'd like to accomplish the same things but with all href how can I do that? please mention me @Shaz3e on twitter with your reply. – shaz3e Nov 03 '14 at 19:43
  • 2
    @shaz3e, use $.each method to loop all anchors, `$("a").each(function() { $(this).attr("href", $(this).attr("href")+ "?template=PW"); });` – Okan Kocyigit Mar 19 '17 at 13:13
  • I have already achieved this by using the following code. – shaz3e Mar 30 '17 at 13:25
3

Use $.attr() to edit an attribute.

$.append() is used to insert an html child node inside your element.

$(document).ready(function(){
    if (document.location.href.indexOf('/MyWebsite/Example.aspx') > 0)  
        {
            var href = '/HelloWorld/default.aspx';
            $('a[href*="' + href + '"]').attr("href", href + "?template=PW")
        }
});
Flo Schild
  • 5,104
  • 4
  • 40
  • 55
3

This would definitely solve your problem as it did mine.

<script type="text/javascript">
    var querystring = 'MyString'; // Replace this
    $('a').each(function(){
        var href = $(this).attr('href');
        href += (href.match(/\?/) ? '&' : '?') + querystring;
        $(this).attr('href', href);
    });
</script>
BuddhiP
  • 6,231
  • 5
  • 36
  • 56
shaz3e
  • 316
  • 2
  • 14
1

Replace

$('a[href*="/HelloWorld/default.aspx"]').append("href",$("?template=PW"))

With

$.each(
    $('a[href*="/HelloWorld/default.aspx"]'),
    function(index, value) {
        $(value).attr('href', $(value).attr('href') + '?template=PW');
    }
);

That will get you started, but you should also check to make sure there isn't a query string parameter already in the matched URL.

$().append() doesn't alter the value of the href attribute, it is used to insert content at the end of each matched element. The jQuery documentation has examples of how to use $().append().

Paolo
  • 20,112
  • 21
  • 72
  • 113
rtcherry
  • 4,840
  • 22
  • 27
1

Have you consider using PURL? With PURL I was able to do this:

var url = "http://localhost/some/url?item1=one&item2=two";
if ($.url(url).attr('query')) {
    url = url + '&newItem=new';
}
else {
    url = url + '?newItem=new';
}
rockstardev
  • 13,479
  • 39
  • 164
  • 296