Как я могу добавить и удалить класс по ссылкам, используя jQuery? - PullRequest
1 голос
/ 09 января 2010

Позвольте мне дать более точное описание того, что я хочу сделать здесь. Я использую вики-пространства, и по умолчанию, когда пользователь добавляет ссылку на новую страницу на боковую панель навигации, вики-пространства вставляют один из двух классов: wiki_link или wiki_link_new . Вот как это выглядит ...

<a href="/Map+Page" class="wiki_link">Map Page</a><br/>
<a href="/Staff+Olympics" class="wiki_link">Staff Olympics</a><br/>
<a href="/Staff+Meetings" class="wiki_link_new">Staff Meetings</a><br/>

Я хотел бы автоматически удалить оба класса (wiki_link и wiki_link_new) и добавить в ссылку класс, который лучше представляет URL-адрес страницы. Итак, для / Map + Page url класс будет добавить к ссылке, которая является первые 3 буквы заголовка ссылки ... карта. И затем, если в URL ссылки есть два слова (как в / Map + Page), класс также добавит первые 3 буквы второго слова в URL, перед которым стоит тире. Таким образом, для / Map + Page класс, который будет добавлен к этой ссылке, будет

class="map-pag"

Или, если бы это был / Staff + URL Олимпиады, добавляемый класс был бы ...

class="sta-oly"

И я полагаю, что если бы в URL-адресе ссылки a: было более 2 слов, лишние слова были бы проигнорированы применительно к применению класса CSS к ссылке, обращая внимание только на первые 3 буквы первого слова, сопровождаемый чертой, и затем сопровождаемыми первыми 3 буквами второго слова.

И вдобавок ко всему, я хотел бы удалить все экземпляры <br/>, которые также вставляются по умолчанию в википространствах.

Так что в идеале я хотел бы, чтобы решение jQuery изменило бы ссылки 3 a: выше на это ...

<a href="/Map+Page" class="map-pag">Map Page</a>
<a href="/Staff+Olympics" class="sta-oly">Staff Olympics</a>
<a href="/Staff+Meetings" class="sta-mee">Staff Meetings</a>

Не уверен, что мои соглашения об именах классов являются лучшими. Так что, если у вас есть лучшее предложение, я хотел бы услышать это! :)

Спасибо за любую помощь, которую вы можете оказать!

1 Ответ

3 голосов
/ 09 января 2010

Это должно делать то, что вы хотите:

// Select the links, and remove their classes
$(".wiki_link, .wiki_link_new").attr('class','').each(function(){
    var className = $(this).attr('href').substr(1).toLowerCase().split('+').slice(0,2).join('-');
    $(this).addClass(className);
});

Я бы просто скрыл теги <br /> с помощью CSS. Управление DOM является дорогостоящим по времени и ресурсам, поэтому, если вы можете просто их скрыть, это будет быстрее.

CSS

#container br { display: none; }

Где #container - любой элемент, являющийся родителем этих тегов a.

Если вы действительно хотите использовать jQuery:

JQuery

$("#container br").remove();

Опять же, где #container является родителем списка a тегов.

...