#javascript #jquery
#javascript #jquery
Вопрос:
Я пытаюсь подсчитать количество ссылок в текстовом поле, чтобы я мог ограничить пользователя не более чем тремя ссылками. Приведенный ниже код — это то, что у меня есть на данный момент, но он не работает. Я думаю, что html закодирован, и это как-то влияет на него … или, может быть, нет. Если да, могу ли я это расшифровать? Есть идеи? Большое спасибо.
$(document).ready(function() {
$('#box-text').keyup(function() {
var links = $('#box-text a');
var total_links=0;
for(var i = 0; i < links.length; i ) {
total_links ;
}
alert("links = " total_links);
});
});
Комментарии:
1. Текст, введенный в
<textarea>
, не изменяет разметку внутри. Вместо этого вы должны смотреть на значение (т.Е.$(this).val()
) текстового поля.2. Собираетесь ли вы попросить пользователя ввести ссылку в формате
<a href="stackoverflow.com">stackoverflow</a>
Ответ №1:
Я бы предпочел, чтобы DOM API выполнял здесь всю работу, а не регулярное выражение или ручной разбор строки.
$('#box-text').bind('keyup paste change', function() {
var linksLength = $('<div />').html($(this).val()).find('a').length;
if (linksLength > 3) {
// Too many links, warn user!
}
});
Обязательно проверьте это и на сервере.
Ответ №2:
Вам нужно будет сопоставить значение текстового поля с регулярным выражением, подобным этому:
$(document).ready(function() {
$('#box-text').keyup(function() {
matches = $('#box-text').val().match(/<a[^>]*>(.*?)</a>/gi);
total_links = matches.length;
alert("links = " total_links);
});
});
Ответ №3:
Если это #box-text
текстовое поле, вы не сможете получать ссылки из $('#box-text a')
.
Вы можете сделать что-то вроде,
$(document).ready(function() {
$('#box-text').keyup(function() {
var text = $(this).val();
var dummy = $('<div>' text '</div>');
var total_links = $('a', dummy).length;
alert("links = " total_links);
});
});
Надеюсь, это поможет. Удачного кодирования.
Комментарии:
1. Это приведет к утечке
total_links
в глобальную область видимости.2. @alex: любопытно. Почему произойдет
total_links
утечка? Предупреждение? или тот факт, что это результат jQuery?3. @Femi До редактирования в нем не было
var
ключевого слова, что означает, что переменная становится глобальной (свойство глобального объекта).4. АХ. Я пропустил редактирование. Спасибо за разъяснение: не знал, что отсутствие
var
области видимости является глобальным. Я довольно религиозно отношусь к использованиюvar
, но это полезно иметь в виду.