Как использовать регулярные выражения в селекторе jQuery: not () - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь сопоставить некоторые идентификаторы, но не любой идентификатор, который является числом.Например, я бы хотел соответствовать #about, но не совпадать #67 или #123.

Вот мой jQuery с небольшим количеством регулярных выражений.Я думаю, что регулярное выражение верное, но оно не обрабатывается правильно, поскольку не href="#<number>"

$('a[href*="#"]:not([href="#"],[href="#\d+"])').click(function() { 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') 
    || location.hostname == this.hostname) {

    var target = $(this.hash);
    target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
       if (target.length) {
         $('html,body').animate({
             scrollTop: target.offset().top -60
        }, 1500);
        return false;
    }
}

});

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

1 Ответ

0 голосов
/ 21 ноября 2018

Селектор jquery не поддерживает регулярное выражение, но вы можете использовать .filter() для фильтрации якорей, имеющих определенный атрибут href с использованием регулярного выражения.

$('a').filter(function(){
  return $(this).attr("href").match(/^#\D+$/);
}).css("color", "red");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#">#</a>
<a href="#about">#about</a>
<a href="#67">#67</a>
<a href="#123">#123</a>
...