jQuery: почему этот селектор работает только иногда? - PullRequest
0 голосов
/ 23 октября 2010

У меня есть список, который выглядит так:

<li class = "current_parent level-0">
  <a> Parent Link </a>
  <ul class= "children">
     <li class = "level-1">
           <a> Link to child </a>
     </li>

     <li class = "level-1 current_page_item">
          <a> Link to child </a>
     </li>

     <li class = "level-1">
           <a> Link to child </a>
     </li>

     </ul>
</li>

У меня также есть несколько jQuery, чтобы найти братьев и сестер этого "текущего элемента страницы" и получить от них некоторую информацию (заголовок и URL). В приведенном выше примере, где «элемент текущей страницы» окружен двумя братьями и сестрами с обеих сторон, код прекрасно работает:

//Get URLs, run a length check against them. Execute functions are necessary. Pass the functions the relevant URL
        var nextURL= $(".current_page_item").next().find("a").attr("href"); //Get the HREF of the next page in list
        var previousURL= $(".current_page_item").prev().find("a").attr("href"); //Get the HREF of the previous page in list


        if(previousURL.length >= 1){    
            alert ("Setting prev URL!");
            setPrevPageLink(previousURL);
        }
        else if(previousURL == undefined){
            alert ("Hiding prev URL!");
            $('.previous_link').hide();
        }


        if (nextURL.length >= 1){
            alert ("Setting next URL!");
            setNextPageLink(nextURL);
        }
        else if(nextURL == undefined){
            alert ("Hiding Next URL!");
            $('.next_link > a').hide();
        }

       function setPrevPageLink(previousURL) {

           var prevTitle = $(".current_page_item").prev().find("a").attr("title"); //Get the title of previous page in list. WP provides.
           $(".previous_link > a").attr("href", previousURL); //Set the 'Previous Link' to the URL of the previous item in list.
           $(".previous_link > a").text(prevTitle); // Set the Title Text of the Link to the title of the previous Item in the List
           alert ("Previous URL is" + previousURL + "and it's title is " + prevTitle + "and it's length is " + previousURL.length); //Drop an alert for Debug
       }

       function setNextPageLink(nextURL){

            var nextTitle = $(".current_page_item").next().find("a").attr("title");
            $(".next_link > a").attr("href", nextURL);
            $(".next_link > a").text(nextTitle);
            alert ("Next URL is" + nextURL + "and the title is" + nextTitle + "and it's length is" + nextURL.length);
       }

Однако, если «текущий элемент страницы» находится в НАЧАЛЕ списка (то есть у него нет «старшего» брата, а только «более низкого»), этот код никогда не выполняется. Зачем? Ничего не происходит в этом. Если «элемент текущей страницы» находится в конце списка, все идет хорошо.

Кроме того, бонус Q: "== undefined" никогда не работает. Зачем? Каков эквивалент isset в Javascript?

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Это потому, что previousURL будет undefined, если нет ссылки для получения href, поэтому вам нужно проверить undefined перед проверкой .length свойства,как это:

    if(previousURL === undefined){  
        alert ("Hiding prev URL!");
        $('.previous_link').hide();
    }
    else if(previousURL.length >= 1){  
        alert ("Setting prev URL!");
        setPrevPageLink(previousURL);
    }

Убедитесь, что сделали то же самое для nextURL.Я думаю, что ваша путаница проистекает из плохого теста, он взорвется , если он тоже окажется в конце списка, вы можете проверить его здесь .

Вот обновленная / рабочая версия для всех сценариев .

0 голосов
/ 23 октября 2010

Ответ на бонусный вопрос:

Чтобы проверить, является ли член группы неопределенным:

typeof x === "undefined"
...