подсчитать количество ссылок в текстовом поле с помощью jquery

#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!
    }
});
  

jsFiddle.

Обязательно проверьте это и на сервере.

Ответ №2:

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

 $(document).ready(function() {
    $('#box-text').keyup(function() {
            matches = $('#box-text').val().match(/<a[^>]*>(.*?)</a>/gi);
            total_links = matches.length;
            alert("links =  "   total_links);
    });
});
  

jsFiddle

Ответ №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 , но это полезно иметь в виду.