Jquery $ this или each () для указания одной ссылки за раз - PullRequest
3 голосов
/ 06 октября 2009

Я нахожу jQuery трудным для изучения, поскольку кажется, что есть много способов написать одно и то же.

В качестве упражнения я хотел бы взять текст в тегах привязки и вставить его в атрибут ссылки href.

например

<a href="">http://www.something.com</a>

стать

<a href="http://www.something.com">http://www.something.com</a>  

моя первая попытка была

<script type="text/javascript">
$(document).ready(function() {
var text = $('a').text();

$('a').attr( 'href', text );
});
</script>

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

Должен ли я использовать цикл foreach? Функция .each ()? Или это обозначение? Будут ли они все работать?

1 Ответ

7 голосов
/ 06 октября 2009
$('a').text()

будет возвращать комбинацию каждого текстового значения узлов привязки. Я только что сделал это в stackoverflow, и он дал мне:

"mederlogoutaboutfaqQuestionsTagsUsersBadgesUnansweredAsk QuestionJquery $ this или each () для указать одну ссылку на timejqueryeachthiseditcloseflagchrisadd комментируйте каждый вопрос questionjquerythiseachC ++ / Unix Программист в Waterfront International Ltdjobs.stackoverflow.comquestion feedaboutfaqblogpodcastprivacy политика рекламы инфоконтакт usfeedback всегда welcomestackoverflow.comserverfault.comsuperuser.commetahowtogeek.comdoctype.comcc-wikiattribution требуется "

Поэтому вам следует использовать jQuery.prototype.each, чтобы вы могли сохранить ссылку на каждый отдельный текст привязки:

$('a').each(function() {
    var text = $(this).text();
    $(this).attr('href', text );
});

Дополнительным преимуществом является то, что каждая функция выполняется в своем собственном контексте выполнения, каждая переменная, которую вы определяете, каждый объявленный «текст» уникален для тела этой функции, так что внутри элемента .each есть много больше элемента управления .

Что касается соглашения о цикле ванили - я бы использовал jQuery.prototype.each поверх него, потому что это функция более высокого уровня, вам нужно будет присвоить переменную длине nodeList и начать с 0, остановиться на длине (или если порядок не имеет значения, сделайте обратный цикл while) .. это просто вызывает больше работы, чем необходимо.

...