Как заменить ссылки - PullRequest
2 голосов
/ 17 декабря 2011

У меня 4 ссылки

<a href="/search/Assassins%20Creed/" class="eTag">Assassins Creed</a> 
<a href="/search/Dead%20Rising%202/" class="eTag">Dead Rising 2</a> 
<a href="/search/Battlefield/" class="eTag">Battlefield</a> 
<a href="/search/Rising/" class="eTag">Rising</a> 

Мне нужно заменить "/ search /" на "/ searchq? ="

Если я использую этот скрипт:

$('.eTag').attr('href',$('.eTag').attr('href').replace('/search/','/searchq?=')); 

Ссылки:

<a href="/searchq?=Assassins%20Creed/" class="eTag">Assassins Creed</a> 
<a href="/searchq?=Assassins%20Creed/" class="eTag">Dead Rising 2</a> 
<a href="/searchq?=Assassins%20Creed/" class="eTag">Battlefield</a> 
<a href="/searchq?=Assassins%20Creed/" class="eTag">Rising</a> 

Почему и как заменить "/ search /" на "/ searchq? ="?

Ответы [ 4 ]

5 голосов
/ 17 декабря 2011

Вам нужно перебрать все из них:

$('.eTag').each(function() {
  $(this).attr('href', $(this).attr('href').replace('/search/','/searchq?='));
});

Я поражен, что твой код даже работал.

3 голосов
/ 17 декабря 2011

Лучший способ - передать функцию в .attr().

$('.eTag').attr('href',function(i,href) {
    return href.replace('/search/','/searchq?='); 
});

. Причина была в следующем:

$('.eTag').attr('href')

... дает вам результат только изпервый элемент найден.

0 голосов
/ 17 декабря 2011

Просто для завершения, вы также можете сделать это в простом javascript, без jQuery:

var tags = document.getElementsByClassName('eTag'),
    l = tags.length,
    i = 0;

for (i = 0; i < l; i++) {
  tags[i].innerText = tags[i].innerText.replace('/search/', '/searchq?=');
}

Это может быть немного шумнее, но это на 33% быстрее, как вы можете видеть в этом jsperfтестовый прогон .(Обратите внимание, что есть и третье решение, использующее оболочку <div>, которая примерно на порядок быстрее, но не уверен, что вы сможете это сделать)

0 голосов
/ 17 декабря 2011

то, что вы сделали, почти правильно, но оно будет указывать на одну и ту же ссылку, потому что значение attr всегда будет возвращаться из 1-го элемента.сделать это как

$('.eTag').each(function() {
  $(this).attr('href', $(this).attr('href').replace('/search/','/searchq?='));
});

скрипка: http://jsfiddle.net/USzfa/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...