2010-08-11 3 views
2

Мне нужно обновить значение href по сравнению с страницей с помощью jquery. Скажите href = "http://www.google.com?gsec=account" следует изменить на href = "http://account.google.com?gsec=account", как я могу это сделать.Мне нужно обновить значение href с помощью jquery

+0

Я предполагаю, что вы хотите динамическое решение, которое выполняет поиск на странице, и заменяет вместо назначения предопределенного 'href' одному предопределенному элементу' '. Если это так, я добавил ответ ниже, который это выполнил. – user113716

+0

Хм ... Я предположил, что «учетная запись» является динамическим значением и что могут быть другие варианты URL (например, http/https и другие строковые переменные запроса). Возможно, я ушел за борт, увидев ваш ответ, хотя LOL. – jmar777

+0

@jmar - Да, у моего ответа есть несколько требований относительно того, что заменено. Небольшая настройка в селекторе и в 'replace()' с использованием регулярного выражения откроет его немного больше. – user113716

ответ

7

Это будет сделать замену в течение страницу, я думаю, что вы ищете.

// Find `<a>` elements that contain `www.google.com` in the `href`. 
$('a[href*="www.google.com"]').attr('href', function(i,href) { 
     // return a version of the href that replaces "www." with "accounts." 
    return href.replace('www.', 'accounts.'); 
}); 

Попробуйте:http://jsfiddle.net/dT8j6/


EDIT: Эта версия позволяет https:// и ссылки без www..

Попробуйте:http://jsfiddle.net/dT8j6/1/

$('a[href*="google.com"]').attr('href', function(i,href) { 
    return href.replace(/^http(s*):\/\/(www\.)*google.com/, 'http$1://accounts.google.com'); 
}); 

EDIT: Если вы только хотите изменить элементы, которые имеют gsec=account, а затем изменить селектор $('a[href*="gsec=account"]').

+0

Не измените ли ссылки на google, у которых нет параметра «gsec = account»? – jmar777

+0

@ jmar777 - Да. Я не был уверен, что это особый параметр. Изменение селектора на '$ ('a [href * =" gsec = account "]')' будет фокусироваться только на этих элементах. – user113716

+0

Ya ... который, вероятно, на 98% безопасен, но, конечно, не работает для yahoo.com?gsec=account, или gsec = accountfoo и т. Д. Не уверен, как _exact_ ему нужна эта вещь. Вопрос несколько расплывчатый. – jmar777

3

позволяет сказать, что у вас есть это:

<a href="http://www.ibm.com" id="myLink"> 

вы должны использовать это:

var newHref = "http://google.com"; 

$("#myLink").attr('href', newHref); 
0

Я думаю, что вы оставили что-то в вашем вопросе. Тем не менее:

var link = $("a"); // Or some other selector to access the link 
link.attr("href", "http://account.google.com?gsec=account"); 
0

Используйте метод jQuery's .attr(). С одним параметром он возвращает значение атрибута, с двумя параметрами, которые вы его установили.

$("a#whatever").attr("href", "http://account.google.com?gsec=account"); 
1

Это дубликат:

How to change the href for a hyperlink using jQuery

Один сценарий не упоминается, если вы установите идентификатор на якорь, который должен быть изменен, то вы можете использовать идентификатор в качестве селектор в jQuery.

$("#LinkId").attr('href', "http://account.google.com?gsec=account") 
0

Если вы хотите изменить все ссылки, то:

$(document).ready(function() { 
$("a").attr("href", "http://account.google.com?gsec=account"); 
}); 
1

Это следует надеяться обеспечить довольно полное решение проблемы (как лучше я могу интерпретировать это, во всяком случае):

$(function() { 
    $('a').each(function() { 
    var $this = $(this), 
     href = $this.attr('href'); 
    var res = href.match(/(.*?)(www)(\.google\.com.*?)([?&]gsec=)([^&]+)(.*)/); 
    if (null != res) { 
     // remove the "full match" entry 
     res = res.slice(1); 
     // replace www match with account match 
     res[1] = res[4]; 
     // update the href attribute 
     $this.attr('href', res.join('')) 
    } 
    }); 
}); 


редактировать: Если «счет» является статическое значение, то это будет работать также:

$(function() { 
    $('a').each(function() { 
    var $this = $(this), 
     href = $this.attr('href'); 
    var res = href.match(/(.*?\/\/)(www)(\.google\.com.*?)([?&]gsec=account)(&?.*)/); 
    if (null != res) { 
     // remove the "full match" entry 
     res = res.slice(1); 
     // replace www match with account match 
     res[1] = 'account'; 
     // update the href attribute 
     $this.attr('href', res.join('')) 
    } 
    }); 
}); 

Пожалуйста, обратите внимание, что эти решения предполагают, что могут быть и другие изменения в URL, например, HTTP/HTTPS и других переменных строки запроса.

Смежные вопросы