найти все ссылки # хеша в div и удалить хэш за последние двадцать - PullRequest
0 голосов
/ 29 июля 2011

Я получил div со ссылками на картинки галереи, которые генерируются скриптом. Есть, скажем, x номеров ссылок + 20, которые были сгенерированы скриптом. Таким образом, каждая ссылка имеет номер и номер. Как www.example.com/#1. Так, в галерее у меня может быть, например, 5 изображений, которые будут иметь # 1 # 2 # 3 и т. Д., И те 20, которые всегда генерируются с числом, начинающимся в этом случае с # 6 # 7 до 26 #.

Так что мой вопрос в том, как найти с помощью jQuery эти последние двадцать URL и удалить # из них.

Arek

Ответы [ 5 ]

2 голосов
/ 29 июля 2011
var start = $("div a").length - 21;
start = start < 0 ? 0 : start;

$("div a:gt(" + start + ")[href^='#']").each(function() {
    var $a = $(this);
    $a.attr("href", $a.attr("href").replace("#", ""));
});

рабочий пример: http://jsfiddle.net/958ea/2/


Разъяснения

var start = $("div a").length - 21; установит start на общее количество тегов a минус 21. 20 + 1, поскольку длина - это общее число, но нам нужен индекс на основе 0.

Таким образом, если бы было 500 тегов привязки, start был бы равен 479;

start = start < 0 ? 0 : start; сбросит start на 0, если так или иначе не было 20 a тегов. Для этого примера это, вероятно, не нужно, но хорошая проверка, чтобы все не сломалось.

Затем мы перебираем теги a с помощью этого селектора: "div a:gt(" + start + ")[href^='#']", который собирается выбрать все теги a с индексом, превышающим значение start (которое в моем примере равно index = 10, что <a href="#11">). Затем он дополнительно фильтрует теги a, которые начинаются с #. Это также может быть ненужным, но это еще одна хорошая вещь для проверки.

Наконец, символ # в href заменяется пустой строкой ""

0 голосов
/ 29 июля 2011

Опираясь на ответ выше, вы можете немного упростить вещи:

$.each(("div a[href^='#']").slice(-20), function() {
    var $a = $(this);
    $a.attr("href", $a.attr("href").replace("#", ""));
});

slice (-20) будет захватывать последние 20 элементов массива.

0 голосов
/ 29 июля 2011

Если вы замените «#» на «» в привязке, он не будет отображаться как ссылка в большинстве браузеров.Попробуйте это

var lastAnchor = $("div a[href='#']:last"), count = 0;
while(count++ <= 20){
   lastAnchor  = lastAnchor.attr("href", "javascript:void(0)").prev("a[href='#']");
}
0 голосов
/ 29 июля 2011

Посмотрите на jQuery nth-child .Просто после прочтения это должно выглядеть примерно так:

$('body > a:nth-child(n+20)').each(function() {
    var _href = $(this).attr("href").replace("#","");
    $(this).attr("href", _href);
});

Edit: Nevermind ... это выберет все ссылки после 20-й ссылки.Не то, что вы хотите.

0 голосов
/ 29 июля 2011
$("div > a").each(function() {
    var linkURL = $(this).attr("href");
    var newURL = linkURL.replace("#", "");
    //Do something with newURL here.
    //eg. to assign it the new url:
    //$(this).attr("href", newURL);
});

Это будет предназначаться для каждого div с тегами привязки в нем, поэтому, если у вас есть больше чем один, присвойте div id и нацельте его следующим образом

$("#theIdYouChose > a").each(function() {
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...