Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как объединить в одну функцию? (https://javascript.ru/forum/jquery/2984-kak-obedinit-v-odnu-funkciyu.html)

grusha 06.03.2009 02:13

Как объединить в одну функцию?
 
Может кто-то подскажет как обединить этот код в один запрос и возможно ли это вообще
Есть такой код:
jQuery('#link_unvote a').click(function(event) {
		
		var href_link = jQuery(this).attr('href');
		var title_link = jQuery(this).attr('title');
		var link_this = this;
		var re = /^(\w+)\(([^)]*)\)$/;
		var found = href_link.match(re);
		var splits = found[2].split(',');
		var el9 = splits[3].replace(/('|")/g,'');
		vote(splits[0], splits[1], splits[2], el9, splits[4], link_this,title_link);
		return false;
});
	
	jQuery('.vote_button').click(function(event) {
										
		var href_link = jQuery(this).attr('href');
		var title_link = jQuery(this).attr('title');
		var link_this = this;
		var re = /^(\w+)\(([^)]*)\)$/;
		var found = href_link.match(re);
		var splits = found[2].split(',');
		var el9 = splits[3].replace(/('|")/g,'');
		vote_news(splits[0], splits[1], splits[2], el9, splits[4], link_this,title_link);
		return false;
		
	
 

  });

 
		
	function vote_news(user, id, htmlid, md5, value, link_this,title_link) {
		
		jQuery.ajax({
			url: "/vote.php",
			data: "id=" + id + "&user=" + user + "&md5=" + md5 + "&value=" + value,
			type:'POST',
			  success: function(aws){
				split = new RegExp ("~--~");
				if (aws.match (split)) {
				b = aws.split (split);
				jQuery(link_this).parent().parent("div").find("#xvotes").html(b[0]).end().find(".vote_img").html("<span class='vote_text_small'>Plus</span>").parents(".stories").find("#linksummaryBury").fadeOut(3000);
				} else {
				errormatch = new RegExp ("^ERROR:");
				aws = aws.substring (6, aws.length);
				jQuery(link_this).parent().parent("div").find(".information_box").show().html(aws).fadeOut(3000);
				}
				
			 },
			 error: function (aws){
			 }
		});
	}
		
	function vote(user, id, htmlid, md5, value, link_this,title_link) {
		
		jQuery.ajax({
			url: "/vote.php",
			data: "id=" + id + "&user=" + user + "&md5=" + md5 + "&value=" + value,
			type:'POST',
			 success: function(aws){
				 
				split = new RegExp ("~--~");
				if (aws.match (split)) {
				b = aws.split (split);
				
				jQuery(link_this).parent().parent("div").find("#linksummaryBury").fadeOut(3000).end().parent().parent("div").find(".vote_img").html("<span class='vote_text_small'>Delete</span>");
				} else {
				errormatch = new RegExp ("^ERROR:");
				aws = aws.substring (6, aws.length);
				jQuery(link_this).parent().parent("div").find(".information_box").show().html(aws).fadeOut(3000);
				}
				 
			
			 },
			 error: function (aws){
			 }
		});
	}


т.е. код идентичен за исключением этих строчек:
jQuery(link_this).parent().parent("div").find("#linksummaryBury").fadeOut(3000).end().parent().parent("div").find(".vote_img").html("<span class='vote_text_small'>Delete</span>");

jQuery(link_this).parent().parent("div").find("#xvotes").html(b[0]).end().find(".vote_img").html("<span class='vote_text_small'>Plus</span>").parents(".stories").find("#linksummaryBury").fadeOut(3000);


Получается из-за двух строчек , так много повторяющегося кода :(

grusha 06.03.2009 02:53

Вобщем сделал так:

jQuery('#link_unvote a, .vote_button').click(function(event) {
		
		var href_link = jQuery(this).attr('href');
		var title_link = jQuery(this).attr('title');
		var link_this = this;
		if(jQuery(this).is('#link_unvote a')){
		var jquery_link = 'jQuery(link_this).parent().parent("div").find("#linksummaryBury").fadeOut(3000).end().parent().parent("div").find(".vote_img").html("<span class=\'vote_text_small\'>Delete</span>")';
	}
	if(jQuery(this).is('.vote_button')){
		var jquery_link = 'jQuery(link_this).parent().parent("div").find("#xvotes").html(b[0]).end().find(".vote_img").html("<span class=\'vote_text_small\'>Plus</span>").parents(".stories").find("#linksummaryBury").fadeOut(3000)';
	} 
		var re = /^(\w+)\(([^)]*)\)$/;
		var found = href_link.match(re);
		var splits = found[2].split(',');
		var el9 = splits[3].replace(/('|")/g,'');
		vote(splits[0], splits[1], splits[2], el9, splits[4], link_this,title_link,jquery_link);
		
		return false;
		
	
 

  });
	function vote(user, id, htmlid, md5, value, link_this,title_link,jquery_link) {
		
		jQuery.ajax({
			url: "/vote.php",
			data: "id=" + id + "&user=" + user + "&md5=" + md5 + "&value=" + value,
			type:'POST',
			 success: function(aws){
				 
				split = new RegExp ("~--~");
				if (aws.match (split)) {
				b = aws.split (split);
				
				eval(jquery_link);
				} else {
				errormatch = new RegExp ("^ERROR:");
				aws = aws.substring (6, aws.length);
				jQuery(link_this).parent().parent("div").find(".information_box").show().html(aws).fadeOut(3000);
				}
				 
			
			 },
			 error: function (aws){
			 }
		});
	}

Незнаю правильно или нет , но работает :)


Часовой пояс GMT +3, время: 10:16.