2011-06-30 19 views
10

Jak przeprogramować wartość href, używając jQuery?Zmiana wartości href za pomocą jQuery

mam powiązań z domyślnego miasta

<a href="/search/?what=parks&city=Paris">parks</a> 
<a href="/search/?what=malls&city=Paris">malls</a> 

Jeżeli użytkownik wprowadzi wartość do pola tekstowego #city chcę zastąpić Paryż o wartości wprowadzone przez użytkownika.

tej pory mam

var newCity = $("#city").val(); 
+0

Polecam ten sposób z formularzami, ponieważ sposób, w jaki robisz to teraz sprawia, że ​​twoja funkcja wyszukiwania jest bezużyteczna bez javascript. – Kokos

Odpowiedz

28

Biorąc masz unikalne href wartości (?what=parks i ?what=malls) Proponuję nie pisanie ścieżkę do metody $.attr(); musielibyśmy mieć jedno połączenie z $.attr() dla każdego unikalnego href, a to byłoby bardzo nadmiarowe, bardzo szybko - nie wspominając już o trudnym zarządzaniu.

Poniżej wykonuję jedno połączenie z numerem $.attr() i za pomocą funkcji zastępowania tylko części &city= nowym miastem. Dobrą rzeczą w tej metodzie jest to, że te 5 linii kodu może aktualizować setki linków bez niszczenia reszty wartości href na każdym łączu.

$("#city").change(function(o){ 
    $("a.malls").attr('href', function(i,a){ 
    return a.replace(/(city=)[a-z]+/ig, '$1'+o.target.value); 
    }); 
}); 

Jedno warto zwrócić uwagę na byłaby przestrzenie i obudowa. Można konwertować wszystko małymi literami przy użyciu metody .toLowerCase() JavaScript i można zastąpić spacje z innego wywołania .replace() jak mam na dole:

'$1'+o.target.value.replace(/\s+/, ''); 

Demo online: http://jsbin.com/ohejez/

+1

dlaczego używać wyrażeń regularnych, gdy nie musisz? czy nie byłoby to technicznie wolniejsze i błędne ... bardziej kruche? – AndyL

+3

@AndyL Ponieważ jutro URL może nie być '/ search /? What = parts & city = Paris', ale zamiast tego'/search /? When = afternoon & what = parks & city = Paris' lub inny wariant. Nie powinieneś już pisać i przepisywać kodu JavaScript, aby uwzględnić te typy zmian; byłoby to zbyt uciążliwe, w mojej szczerej opinii. – Sampson

+0

prawidłowy punkt, chociaż zdecydowanie zależy od aplikacji. – AndyL

2

tak:

var newCity = $("#city").val(); 

$('a').attr('href', '/search/?what=parks&city=' + newCity); 

EDIT: Dodany ciąg wyszukiwania

+4

Spowoduje to zastąpienie całego adresu URL, a nie tylko wartości parametru 'city'. –

+0

Dzięki, jestem pewien, że OP to wymyślił. – Phil

14
$('a').attr("href", "/search/?what=parks&city=" + newCity); 
4

Jak tylko klucz zostaje zwolniony w ramach #city pole wejściowe, href zostanie zaktualizowane re.

$('#city').keyup(function(){ 

    $('a').attr('href','/search/?what=parks&city='+$(this).val()); 

}); 
+0

To najlepsze rozwiązanie. – Phil

+0

dzięki! dobry. Mimo że wprowadziłem pewne zmiany ... Dodałem callback "onkeyup" do "input". coś w rodzaju iw tej funkcji wywołania zwrotnego dodałem kod. Dzięki! – OhadR

Powiązane problemy