我正在尝试转换一个非常简单的脚本,该脚本从Twitter获取搜索结果并将其输出到无序列表中。这是我第一次尝试编写插件时,它似乎并没有在我调用它时触发所有代码。脚本由iteself工作正常,这是我为插件编写的代码:
(function($) {
$.fn.tweetGet = function(options) {
var defaults = {
query: 'from:twitter&rpp=10',
url: 'http://search.twitter.com/search.json?callback=?&q='
};
var options = $.extend(defaults, options);
return this.each(function() {
// Get tweets from user query
$.getJSON(options.url + options.query, function(data) {
var tweets = [];
$.each(data.results, function(i, tweet) {
tweets.push('<li>' + tweet.text.parseURL().parseUsername().parseHashtag() + '</li>');
});
$('#target').append('<ul>' + tweets.join('') + '</ul>');
});
// Parse tweets for URLs and convert to links
String.prototype.parseURL = function() {
return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&~\?\/.=]+/g, function(url) {
return url.link(url);
});
};
// Parse tweets for twitter usernames and convert to links
String.prototype.parseUsername = function() {
return this.replace(/(?:^|\s)@[a-zA-Z0-9_.-]+\b/, function(user) {
var username = user.replace("@","")
return user.link("http://twitter.com/"+username);
});
};
// Parse tweets for hashtags and convert to links
String.prototype.parseHashtag = function() {
return this.replace(/[#]+[A-Za-z0-9-_]+/g, function(hash) {
var hashtag = hash.replace("#","%23")
return hash.link("http://search.twitter.com/search?q="+hashtag);
});
};
});
};
})(jQuery);
正在调用该函数:
$('#target').tweetGet({query: 'from:twitter&rpp:10'});
以外的所有内容都返回this.each(function(){}; 工作正常,但是没有任何内容可以解雇或给我任何错误。我读过的所有教程似乎都在使用同样的基本格式,但我似乎无法弄清楚我做错了什么......
答案 0 :(得分:1)
以下是工作版本:http://jsfiddle.net/JAAulde/QK35D/3/
( function( global )
{
var String, $;
if( global.jQuery )
{
String = global.String;
$ = window.jQuery;
String.prototype = $.extend( String.prototype, {
// Parse tweets for URLs and convert to links
parseURL: function()
{
return this.replace( /[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&~\?\/.=]+/g, function( url )
{
return url.link( url );
} );
},
// Parse tweets for twitter usernames and convert to links
parseUsername: function()
{
return this.replace( /@[a-zA-Z0-9_.-]+\b/g, function( user )
{
return user.link( 'http://twitter.com/' + user.replace( '@', '' ) );
} );
},
// Parse tweets for hashtags and convert to links
parseHashtag: function()
{
return this.replace( /[#]+[A-Za-z0-9-_]+/g, function( hash )
{
return hash.link( 'http://search.twitter.com/search?q=' + hash.replace( '#', '%23' ) );
} );
}
} );
$.fn.tweetGet = function( options )
{
var defaults = {
query: 'from:twitter&rpp=10',
url: 'http://search.twitter.com/search.json?callback=?&q='
};
options = $.extend( defaults, options );
return this.each( function()
{
var target = this;
// Get tweets from user query
$.getJSON( options.url + options.query, function( data )
{
var tweets = [];
$.each( data.results, function( i, tweet )
{
tweets.push( '<li>' + tweet.text.parseURL().parseUsername().parseHashtag() + '</li>' );
} );
$( target ).append( '<ul>' + tweets.join('') + '</ul>' );
} );
} );
};
}
}( window ) );
在解释我的修改时,请观看此更新的答案。
<强>编辑:强>
#target
选择器,因为它专门针对一个元素,而不是使用调用该插件的集合(由于getJSON回调而调整范围)。var
前面删除options = $.extend( defaults, options );
声明,因为它不需要,并且有可能擦除执行时传入插件的内容。parseUsername
功能以停止在用户名网址中的用户名前添加空格