Разобрать что-то для функции jQuery - PullRequest
1 голос
/ 13 марта 2011

Я новичок в jQuery / JavaScript, поэтому, пожалуйста, прости меня, вещи не имеют смысла.

У меня написана функция ниже.

$.fn.getFeed = function(feedXML) {
    $.ajax({
        type: "GET",
        url: feedXML,
        dataType: "xml",
        success: function(xml) {
            $(xml).find('item').each(function(){
                var title = $(this).find('title').text();
                var url = $(this).find('link').text();
                $(this).html('<li><a href="'+url+'">'+title+'</a>').appendTo('#feed-1');
            });
        }
    });
};

Но я хочу иметь возможность вызывать / использовать эту функцию для привязки к конкретным идентификаторам, например, например

$('#feed-1').getFeed('foo.xml');
$('#feed-2').getFeed('bar.xml');

А потом в моем HTML у меня есть что-то вроде этого.

<ol id="feed-1"></ol>
<ol id="feed-2"></li>

Прямо сейчас, все добавлено только к 'feed-1', я не уверен, как я мог заставить это добавить к другому идентификатору. Как мне сделать так, чтобы можно было также разобрать ID?

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

Внутри функции this относится к выбранным элементам.Поэтому вы должны сохранить ссылку на них:

var target = this;

, а затем передать ее appendTo:

$(this).html(...).appendTo(target);

Пример:

$.fn.getFeed = function(feedXML) {
    var target = this;     
    $.ajax({
        //...
        success: function(xml) {
            $(xml).find('item').each(function(){
                // ...
                $('<li><a href="'+url+'">'+title+'</a></li>').appendTo(target);
                // or target.append('<li><a href="'+url+'">'+title+'</a></li>');
            });
        }
    });  
    return this;
};

Редактировать: $(this).html(...) не будет работать.Это установит содержимое элемента item равным тому, что вы передаете html().По крайней мере, в Chrome это выдает ошибку.Я думаю, вы просто хотите создать новый элемент списка, включающий ссылку и заголовок, и добавить его в список.

Для получения дополнительной информации о написании плагинов jQuery я предлагаю прочитать jQuery - Плагины/ Authoring ( особенно это )


Примечание: вы также должны return this; в своей функции для поддержки цепочки методов.

0 голосов
/ 13 марта 2011
$.fn.getFeed = function(feedXML) {

    var $feedElm = $(this);

    $.ajax({
        type: "GET",
        url: feedXML,
        dataType: "xml",
        success: function(xml) {
            $(xml).find('item').each(function(){
                var title = $(this).find('title').text();
                var url = $(this).find('link').text();
                $(this).html('<li><a href="'+url+'">'+title+'</a>').appendTo($feedElm);
            });
        }
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...