Syntax error, unrecognized expression for href

84,513

Solution 1

You need to enclose special characters in quotes when using a attribute based selector.

if ($('ul li a[href="' + id + '"]').length) {

Your version of selector would result

if ($("ul li a[href=#!...]").length) {

The #! will throw unrecognized expression.


My version where the "" escape the characters

if ($('ul li a[href="#!..."]').length) {

Solution 2

I tried the solution provided by

https://github.com/jquery/jquery/issues/2885

which worked for me. I search for [href=#] in js and replace with [href*=\\#]

a[href*=\\#]:not([href=\\#])

Solution 3

you may add the below code in functions.php

function modify_jquery() {
if (!is_admin()) {
	wp_deregister_script('jquery');
	wp_register_script('jquery', 'https://code.jquery.com/jquery-1.11.3.min.js');
	wp_enqueue_script('jquery');
}
}
add_action('init', 'modify_jquery');
Share:
84,513
TDG
Author by

TDG

Updated on December 12, 2020

Comments

  • TDG
    TDG over 3 years

    When I add below script and run. I am getting this:

    Uncaught Error: Syntax error, unrecognized expression: ul li a[href=#!id1]

    I am not sure which double quote causing the issue.

    HTML

    <ul>
     <li class="slist selected" id="id1"><a href="#!id10">Test1/a></li>
     <li class="slist" id="id2"><a href="#!id20">Test2</a></li>
     <li class="slist" id="id3"><a href="#!id30">Test3/a></li>
    </ul>
    

    JS

    $(document).ready(function () {
        var id = "#!" + window.location.href.split("!")[1];
        if ($("ul li a[href=" + id + "]").length) {
            console.log("present");    
        } else {    
            console.log("absent")
        }
    });
    
  • KhoPhi
    KhoPhi almost 7 years
    This worked. It appears jquery below the above version had issues. Thanks for pointing out.
  • questionbank
    questionbank over 4 years
    In my scenario, I was using $(document).on("click", "a[href^=#]", function(e) { and I added only single quote a[href^='#']" and it's working. Thanks Shaunak. upvote form my side.
  • Damion Gomez
    Damion Gomez almost 4 years
    I searched for [href=# and wrapped everything between the equals and closing bracket in quotes. "[href=#abc]" became "[href='#abc']"
  • Vimal Patel
    Vimal Patel over 3 years
    Does this answer has anything to do with mention question?