Ссылка на обновление jQuery - PullRequest
2 голосов
/ 17 июня 2010

Вот HTML:

<a href="http://site.com/any/different/folders/picture_name.jpg">Go and win</a>
<a href="http://site.com/not/similar/links/some_other_name.png">Go and win</a>

Как добавить текст после последнего "/" в href атрибут (до picture_name.jpg) каждой ссылки?

Скрипт должен дать что-то вроде:

<a href="http://site.com/any/different/folders/user_picture_name.jpg">Go and win</a>
<a href="http://site.com/not/similar/links/user_some_other_name.png">Go and win</a>

Здесь добавлено user_.

Каждая ссылка var img_link

Может быть любая длина ссылки.

Ответы [ 5 ]

7 голосов
/ 17 июня 2010

В этом решении используются регулярные выражения , которые отлично справляются с простыми манипуляциями со строками, такими как:

$('a[href]').each(function() {
  var img_link = $(this).attr('href');
  $(this).attr('href', img_link.replace(/([^\/]+)$/, "user_$1"));
});

Обновлено для использования img_link по запросу OP.

Если у вас уже есть переменная img_link и ваш собственный цикл each(), просто используйте одну строку внутри функции, например:

  $(this).attr('href', img_link.replace(/([^\/]+)$/, "user_$1"));
3 голосов
/ 17 июня 2010

Так что я думаю, что лучшим решением будет использование соединения и соединения.

jQuery Пример

$("a").each(function(){
var arr = $(this).attr("href").split("/")
arr[arr.length-1] = "_user" + arr[arr.length-1];
$(this).attr("href",arr.join("/"));
});
2 голосов
/ 17 июня 2010

Красиво и чисто. Нет разбиений, нет массивов, нет регулярных выражений. : О)

Проверьте это здесь: http://jsfiddle.net/Pjdtm/

    var index = img_link.lastIndexOf('/') + 1;

       // "result" now stores the new href. 
    var result = img_link.substr(0,index) + 'user_' + img_link.substr(index);
1 голос
/ 17 июня 2010

Вы можете получить атрибут по var hrefText = jQuery('a').attr('href'); затем вы можете изменить hrefText как:

hrefText = hrefText.substr(0,hrefText.lastIndexOf('/'))+'user_'+hrefText.substr(hrefText.lastIndexOf('/')),hrefText.length); //do this in each statement и затем установите атрибут снова.

jQuery('a').attr(hrefText);

Сказав, что если у вас есть количество ссылок, вы не должны использовать javascript

1 голос
/ 17 июня 2010

Вот один из способов.Используйте следующее регулярное выражение для атрибута href:

(http://.+/(?=.+"))(.+)

Это будет соответствовать http://site.com/not/similar/links/ и folders/user_picture_name.jpg отдельно.Затем вы можете объединить два совпадения с текстом, добавленным в середине.

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