jquery вложил каждую проблему - PullRequest
1 голос
/ 17 июня 2009

См. Редактировать ниже. Я пытаюсь заставить JQuery работать в плагине WordPress, который я создаю. (при использовании jquery в wordpress, fyi вместо слова $ используется строка 'jQuery')

образец xml:

   <person>
        <Name>Some Name</Name>
        <location>
            <locationName>One Address</locationName>
        </location>
        <date>
            <startDate>01-01-09</startDate>
        </date>
    </person>

образец jquery:

jQuery(text).find("person").each(function(){
    jQuery("#active_list")
        .append(
            "<div id=\'Entry\'>"
            + jQuery(this).find("Name").text()
            + "<b> at </b>"
    ;

    jQuery(this)
        .find("location")
        .each(function(){
            jQuery("#active_list")
                .append(
                    jQuery(this).find("locationName").text()
                    + " <b> on </b>"
                )
            ;
        })
    ;

    jQuery("#active_list")
        .append(
            jQuery(this).find("date").find("startDate").text()
            + "</div>"
        )
    ;
});

и затем выдается плохая наценка:

<div id="Entry"> Some Name<b> at </b></div>One Address <b> on </b>01-01-09

как вы видите, он вставляет / divs сразу после выхода из второго вложенного цикла. Я явно делаю что-то не так, но не знаю что. Есть идеи?

РЕДАКТИРОВАТЬ: Если положить

jQuery("#active_list").append("<div id=\'ActivityEntry\'>");

на своей собственной линии, он сразу же закрывает div. Поэтому я предполагаю, что мне нужно создать элемент div с помощью jquery, а затем упаковать его и добавить свой элемент div.

Ответы [ 2 ]

3 голосов
/ 17 июня 2009

Небольшой совет по использованию jQuery с Wordpress: заключите его в функцию. Это позволит вам использовать знакомую функцию $ и не допустит загрязнения глобального пространства имен переменными.

Например, ваш код может быть переписан как:

(function($) {

    ... (code with $) ...

})(jQuery);

Что касается ответа на ваш вопрос, вложенные each не будут работать в jQuery, если вы используете переменную this. Чтобы решить вашу проблему, попробуйте использовать полный стиль each:

$(...).each(function(i, val1) { 

    $(...).each(function(j, val2) { ... }

});

И используйте val1 и val2 вместо this.

2 голосов
/ 17 июня 2009

мое предложение к вашей проблеме

jQuery(text).find("person").each(function(){
   var html;
   html = jQuery(this).find("Name").text() + "<b> at </b>";

   jQuery(this).find("location").each(function(){
      html += jQuery(this).find("locationName").text() + " <b> on </b>";
   });

   html += jQuery(this).find("date").find("startDate").text();
   jQuery("#active_list").append("<div id=\'Entry\'>" + html + "</div>");
});

Это должно работать. Вы пытаетесь настроить его. Причина, по которой ваш скрипт не работал, заключалась в том, что jquery преобразует каждую строку в объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...