Как проверить, содержит ли атрибут href строку? - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу получить все теги "a" со страницы, получить ее атрибут "href" и проверить, есть ли в этом href текст ".pdf". Таким образом, я получаю все a теги в переменную tags, затем с помощью функции each() я проверяю каждое "a" (как tag). Но код:

  if ($(tag).indexOf('.pdf') > 0) 
    console.log($(tag));

не работает. Почему? Почему я не могу использовать indexOf на href? Я попробовал с search() функцией, но она также не работает.

Так что я подумал - хорошо, что-то не так с этим href. Давайте рассмотрим это как текст.

Но код:

  var text = $(tag).text();
    console.log(text);

тоже не работает. Кто-нибудь может сказать мне почему?

Во фрагменте кода намеренно есть ошибки - чтобы показать, с чем у меня проблема.

Заранее спасибо.

(function($){
  var tags = $('a');
  $(tags).each(function() {
        var tag = $(this).attr('href')     
        
        if ($(tag).indexOf('.pdf') > 0) 
          console.log($(tag));
            
        var text = $(tag).text();
        console.log(text);
  });
}(jQuery));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<html>
  <a href="https://www.test.com/example.pdf" target="_blank">Link with ".pdf"</a>
  <a href="https://www.test.com/" target="_blank">Link without ".pdf"</a>
</html>

1 Ответ

3 голосов
/ 24 апреля 2020

Нет необходимости для дополнительных $(tag) при вызове indexOf. tag - это строка в этой точке, и вам не нужно делать ее jQuery объектом. просто позвоните tag.indexOf('.pdf') > 0. Для строк вы также можете использовать tag.includes('.pdf') или go для tag.substr(tag.length - 4, 4) === '.pdf', чтобы сделать его еще более точным.

...