আমি jQuery দিয়ে একটি প্রকল্প শুরু করছি।
আপনার jQuery প্রকল্পে আপনার কোন ক্ষতি / ত্রুটি / ভুল ধারণা / আপত্তি / অপব্যবহার করেছেন?
আমি jQuery দিয়ে একটি প্রকল্প শুরু করছি।
আপনার jQuery প্রকল্পে আপনার কোন ক্ষতি / ত্রুটি / ভুল ধারণা / আপত্তি / অপব্যবহার করেছেন?
উত্তর:
পারফরম্যান্সের বিষয়ে অজানা এবং নির্বাচকদের স্থানীয় ভেরিয়েবলগুলিতে বরাদ্দ না দিয়ে অতিরিক্ত ব্যবহার করা। উদাহরণ স্বরূপ:-
$('#button').click(function() {
$('#label').method();
$('#label').method2();
$('#label').css('background-color', 'red');
});
বরং:-
$('#button').click(function() {
var $label = $('#label');
$label.method();
$label.method2();
$label.css('background-color', 'red');
});
বা শিকল দিয়ে আরও ভাল : -
$('#button').click(function() {
$("#label").method().method2().css("background-color", "red");
});
আমি দেখেছি এই কলটি স্ট্যাকগুলি কীভাবে কাজ করে তা বুঝতে পেরে আমি আলোকময় মুহূর্তটি ।
সম্পাদনা করুন: মন্তব্যে অন্তর্ভুক্ত পরামর্শ।
var $label = $('#label');
প্রসঙ্গটি কীভাবে ব্যবহার করবেন তা বুঝুন। সাধারণত, একটি jQuery নির্বাচনকারী পুরো দস্তাবেজ অনুসন্ধান করবে:
// This will search whole doc for elements with class myClass
$('.myClass');
তবে আপনি একটি প্রসঙ্গের মধ্যে অনুসন্ধান করে জিনিসগুলিকে গতি বাড়িয়ে দিতে পারেন:
var ct = $('#myContainer');
// This will search for elements with class myClass within the myContainer child elements
$('.myClass', ct);
[0]। $('.myClass', ct);অথবা আপনি যদি জানেন যে সিটি jQuery এর উদাহরণ হিসাবে আপনি সন্ধান করতে পারেনct.find(".myClass")
খালি শ্রেণি নির্বাচকদের ব্যবহার করবেন না:
$('.button').click(function() { /* do something */ });
এটিতে প্রতিটি একক উপাদানের দিকে তাকানো শেষ হবে এটিতে "বোতাম" এর শ্রেণি রয়েছে কিনা তা দেখার জন্য।
পরিবর্তে, আপনি এটি সাহায্য করতে পারেন, যেমন:
$('span.button').click(function() { /* do something */ });
$('#userform .button').click(function() { /* do something */ });
আমি রেবেকা মারফি ব্লগ থেকে এই গত বছর শিখেছি
আপডেট - এই উত্তরটি 2 বছর আগে দেওয়া হয়েছিল এবং jQuery এর বর্তমান সংস্করণের জন্য সঠিক নয় । মন্তব্যগুলির মধ্যে একটিতে এটি প্রমাণ করার জন্য একটি পরীক্ষা অন্তর্ভুক্ত। পরীক্ষার একটি আপডেট সংস্করণও রয়েছে যা এই উত্তরের সময় jQuery এর সংস্করণ অন্তর্ভুক্ত করে।
$('.b')ব্যবহার করতে পারে document.getElementsByClassName('b')তবে $('a.b')এটি করার ফলে এটি শ্রেণীর সাথে সমস্ত মিলের উপাদান খুঁজে পেতে পারে bএবং তারপরে তারা নিশ্চিত করতে পারে যে তারা দুটি পর্যায়ে অপারেশনে অ্যাঙ্কর রয়েছে are পরেরটি আমার কাছে আরও কাজ বলে মনে হচ্ছে। বাস্তব জীবনের উপমা জন্য, এটি ব্যবহার করে দেখুন: আমার ঘরে সমস্ত মোজা খুঁজে নিন। এখন, আমার ড্রয়ারে নেই এমনগুলি ফেলে দিন।
বেনামে ফাংশনগুলি বিভক্ত করার চেষ্টা করুন যাতে আপনি সেগুলি পুনরায় ব্যবহার করতে পারেন।
//Avoid
$('#div').click( function(){
//do something
});
//Do do
function divClickFn (){
//do something
}
$('#div').click( divClickFn );
(anonymous)। এই টিপটি সম্পর্কে এখানে আরও পড়ুন: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…
আমি ডক রেডি স্টেটমেন্টের ভিতরে কয়েকশ লাইনের কোড দেখেছি। কুরুচিপূর্ণ, অপঠনযোগ্য এবং বজায় রাখা অসম্ভব।
ব্যবহার করার সময় $.ajaxজন্য ফাংশন আয়াক্স সার্ভারে অনুরোধের, আপনি ব্যবহার এড়িয়ে চলা উচিত completeপ্রক্রিয়া প্রতিক্রিয়া ডেটাতে ইভেন্ট। অনুরোধটি সফল হয়েছিল কি না তা আগুন দিয়ে দেবে।
পরিবর্তে complete, ব্যবহার success।
ডক্সে অ্যাজাক্স ইভেন্টগুলি দেখুন ।
মনে করুন আপনি কোনও অনুচ্ছেদে ক্লিক করার পরে এটি অদৃশ্য হয়ে যেতে চেয়েছিলেন। আপনি পরে ডিওএম থেকে উপাদানটি সরিয়ে ফেলতে চেয়েছিলেন। আপনি সম্ভবত পদ্ধতিগুলি শৃঙ্খল করতে পারেন বলে মনে করতে পারেন:
$("p").click(function(e) {
$(this).fadeOut("slow").remove();
});
এই উদাহরণে, .remove () এর আগে ডাকা হবে .fadeOut () সম্পূর্ণ হয়ে গেলে, আপনার ধীরে ধীরে বিবর্ণ প্রভাবটি ধ্বংস করে এবং উপাদানটি তাত্ক্ষণিকভাবে অদৃশ্য হয়ে যায়। পরিবর্তে, যখন আপনি কেবল পূর্ববর্তীটি শেষ করেই কোনও আদেশ সরিয়ে দিতে চান, কলব্যাকটি ব্যবহার করুন:
$("p").click(function(e){
$(this).fadeOut("slow", function(){
$(this).remove();
});
});
.FadeOut () এর দ্বিতীয় প্যারামিটারটি একটি বেনামী ফাংশন যা .fadeOut () অ্যানিমেশনটি শেষ হয়ে গেলে একবার চলবে। এটি ধীরে ধীরে বিবর্ণ হয়ে যায় এবং পরবর্তী উপাদানটিকে অপসারণ করে।
যদি আপনি একই ইভেন্টটিকে একাধিকবার বেঁধে রাখেন তবে এটি একাধিকবার জ্বলতে থাকবে। আমি সাধারণত সবসময় unbind('click').bind('click')কেবল নিরাপদ থাকতে যাই
প্লাগ-ইনগুলি ব্যবহার করবেন না।
বেশিরভাগ সময় আপনার কেবল গ্রন্থাগার এবং সম্ভবত ইউজার ইন্টারফেসের প্রয়োজন হয়। আপনি যদি এটি সহজ রাখেন তবে আপনার কোড দীর্ঘমেয়াদে রক্ষণাবেক্ষণযোগ্য হবে। সমস্ত প্লাগইন সমর্থিত এবং রক্ষণাবেক্ষণ করা হয় না, আসলে বেশিরভাগটি তা নয়। যদি আপনি মূল উপাদানগুলি ব্যবহার করে কার্যকারিতা নকল করতে পারেন তবে আমি দৃ strongly়তার সাথে এটির প্রস্তাব দিচ্ছি।
আপনার কোডগুলিতে প্লাগ-ইনগুলি সন্নিবেশ করা সহজ, আপনার কিছুটা সময় সাশ্রয় হয় তবে যখন আপনার অতিরিক্ত কিছু প্রয়োজন হবে তখন আপনি সম্ভাব্য আপডেটগুলি হারাতে সেগুলি সংশোধন করা খারাপ ধারণা। আপনি যখন শুরুতে সময় সাশ্রয় করবেন আপনি অবহিত প্লাগইনগুলি পরে পরিবর্তন করবেন।
আপনি যে প্লাগইনগুলি বুদ্ধিমানের সাথে ব্যবহার করেন তা চয়ন করুন। লাইব্রেরি এবং ব্যবহারকারীর ইন্টারফেস ছাড়াও, আমি ক্রমাগত $। কুকি , $ .for , $। বৈধকরণ এবং ঘনবক্স ব্যবহার করি । বিশ্রামের জন্য আমি বেশিরভাগ নিজের প্লাগইনগুলি বিকাশ করি।
পিটফল: নির্বাচকদের পরিবর্তে লুপ ব্যবহার করা।
আপনি যদি নিজেকে ডিওএম উপাদানগুলির পুনরাবৃত্তি করতে jQuery '.each' পদ্ধতির কাছে পৌঁছেছেন তবে নিজেকে জিজ্ঞাসা করুন যে পরিবর্তে উপাদানগুলি পেতে কোনও নির্বাচক ব্যবহার করতে পারেন কিনা।
JQuery নির্বাচনকারীদের উপর আরও তথ্য:
http://docs.jquery.com/Selectors
পিটফল: ফায়ারব্যাগের মতো কোনও সরঞ্জাম ব্যবহার করছে না
ফায়ারব্যাগ ব্যবহারিকভাবে এই জাতীয় ডিবাগিংয়ের জন্য তৈরি করা হয়েছিল। আপনি যদি জাভাস্ক্রিপ্টের সাথে ডিওএম নিয়ে ঘুরঘুর করতে চলেছেন তবে আপনাকে দৃশ্যমানতা দেওয়ার জন্য ফায়ারবগের মতো একটি ভাল সরঞ্জামের প্রয়োজন।
ফায়ারব্যাগ সম্পর্কিত আরও তথ্য: http://getfirebug.com/
অন্যান্য দুর্দান্ত ধারণাগুলি পলিমারফিক পডকাস্টের এই পর্বে রয়েছে: (ডেভ ওয়ার্ডের সাথে jQuery সিক্রেটস) http://polymorphicpodcast.com/shows/jquery/
সঠিক প্রসঙ্গে এই সনাক্তকারীকে ব্যবহার করার ভুল ধারণা unders এই ক্ষেত্রে:
$( "#first_element").click( function( event)
{
$(this).method( ); //referring to first_element
$(".listOfElements").each( function()
{
$(this).someMethod( ); // here 'this' is not referring first_element anymore.
})
});
এবং কীভাবে আপনি এটি সমাধান করতে পারেন তার একটি নমুনা এখানে:
$( "#first_element").click( function( event)
{
$(this).method( ); //referring to first_element
var $that = this;
$(".listOfElements").each( function()
{
$that.someMethod( ); // here 'that' is referring to first_element still.
})
});
পুরো ডোমটি বেশ কয়েকবার অনুসন্ধান করা এড়িয়ে চলুন। এটি এমন কিছু যা সত্যই আপনার স্ক্রিপ্টে বিলম্ব করতে পারে।
খারাপ:
$(".aclass").this();
$(".aclass").that();
...
ভাল:
$(".aclass").this().that();
খারাপ:
$("#form .text").this();
$("#form .int").that();
$("#form .choice").method();
ভাল:
$("#form")
.find(".text").this().end()
.find(".int").that().end()
.find(".choice").method();
সর্বদা ক্যাচ করুন this (এটি) একটি অর্থপূর্ণ পরিবর্তনশীল বিশেষত একটি .each () এ
এটার মত
$(selector).each(function () {
var eachOf_X_loop = $(this);
})
$selfবা $thisযদি আপনি খুব ভাল ভেরিয়েবল নামের কথা চিন্তা করতে খুব অলস হন।
ঘটনাবলী
$("selector").html($("another-selector").html());
ইভেন্টগুলির কোনও ক্লোন করে না - আপনাকে সেগুলি সমস্ত রিইন্ড করতে হবে।
জেপির কমেন্ট অনুসারে টি - ক্লোন () আপনি যদি সত্যটি পাস করেন তবে ইভেন্টগুলি পুনরায় প্রত্যাবর্তন করবে।
একই jQuery অবজেক্টের একাধিক সৃষ্টি এড়িয়ে চলুন
//Avoid
function someFunc(){
$(this).fadeIn();
$(this).fadeIn();
}
//Cache the obj
function someFunc(){
var $this = $(this).fadeIn();
$this.fadeIn();
}
$this = $(this);পৃথক লাইনে থাকা আরও পাঠযোগ্য । যদি আপনি (কোনও $this$(this).fadeIn().fadeIn();
অনেকগুলি ডিওএম হেরফের তৈরি করা যদিও .html (), .append (), .প্রেপেন্ড () ইত্যাদি পদ্ধতি দুর্দান্ত, ব্রাউজাররা যেভাবে পৃষ্ঠা রেকর্ড করে এবং পুনরায় রেন্ডার করে, সেগুলি প্রায়শই ব্যবহার করা ধীরগতির কারণ হতে পারে। স্ট্রিং হিসাবে এইচটিএমএল তৈরি করা এবং একাধিকবার ডম পরিবর্তনের পরিবর্তে একবার এটি ডিওএমে অন্তর্ভুক্ত করা ভাল।
পরিবর্তে:
var $parent = $('#parent');
var iterations = 10;
for (var i = 0; i < iterations; i++){
var $div = $('<div class="foo-' + i + '" />');
$parent.append($div);
}
এটা চেষ্টা কর:
var $parent = $('#parent');
var iterations = 10;
var html = '';
for (var i = 0; i < iterations; i++){
html += '<div class="foo-' + i + '"></div>';
}
$parent.append(html);
অথবা এটিও (pper র্যাপার একটি নতুন তৈরি উপাদান যা এখনও ডিওমে ইনজেকশন করা হয়নি this ):
var $parent = $('#parent');
var $wrapper = $('<div class="wrapper" />');
var iterations = 10;
for (var i = 0; i < iterations; i++){
var $div = $('<div class="foo-' + i + '" />');
$wrapper.append($div);
}
$parent.append($wrapper);
এএসপি.এনইটি প্রকল্পে নিয়ন্ত্রণের "আসল" আইডি পেতে ক্লায়েন্টআইডি ব্যবহার করা।
jQuery('#<%=myLabel.ClientID%>');
এছাড়াও, আপনি যদি শেয়ার পয়েন্টের ভিতরে jQuery ব্যবহার করছেন তবে আপনাকে অবশ্যই jQuery.noConflict () কল করতে হবে।
ফাংশনে jQuery অবজেক্টের পরিবর্তে আইডি পাস করা:
myFunc = function(id) { // wrong!
var selector = $("#" + id);
selector.doStuff();
}
myFunc("someId");
মোড়ানো সেট পাস করা আরও নমনীয়:
myFunc = function(elements) {
elements.doStuff();
}
myFunc($("#someId")); // or myFunc($(".someClass")); etc.
শৃঙ্খলার অতিরিক্ত ব্যবহার।
এটা দেখ:
this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);
স্ট্রিং সংগ্রহকারী-শৈলী ব্যবহার করুন
অপারেটর ব্যবহার করে মেমরিতে একটি নতুন স্ট্রিং তৈরি হয় এবং এর সাথে সংমিশ্রিত মান নির্ধারিত হয়। এর পরে কেবল ফলাফলটি একটি চলককে বরাদ্দ করা হয়। সংক্ষিপ্ত ফলাফলের জন্য মধ্যবর্তী পরিবর্তনশীল এড়াতে, আপনি সরাসরি + = অপারেটর ব্যবহার করে ফলাফলটি বরাদ্দ করতে পারেন। মন্থর:
a += 'x' + 'y';
দ্রুত:
a += 'x';
a += 'y';
আদিম ক্রিয়াকলাপগুলি ফাংশন কলগুলির চেয়ে দ্রুততর হতে পারে
কর্মক্ষমতা সমালোচনামূলক লুপ এবং ফাংশনগুলিতে ফাংশন কলগুলির মাধ্যমে বিকল্প আদিম অপারেশনটি বিবেচনা করুন Consider মন্থর:
var min = Math.min(a, b);
arr.push(val);
দ্রুত:
var min = a < b ? a : b;
arr[arr.length] = val;
আপনি যদি ব্যবহারকারীদের তাদের ব্রাউজারে এইচটিএমএল সত্তা দেখতে চান তবে ইউনিকোড স্ট্রিং ইনজেক্ট করতে 'পাঠ্য' পরিবর্তে 'এইচটিএমএল' ব্যবহার করুন, যেমন:
$('p').html("Your Unicode string")
আমার দুই সেন্ট)
সাধারণত, জ্যাকোয়ারি নিয়ে কাজ করার অর্থ আপনাকে সার্বক্ষণিক ডওম উপাদানগুলির বিষয়ে চিন্তা করতে হবে না। আপনি এর মতো কিছু লিখতে পারেন - $('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})- এবং এই কোডটি কোনও ত্রুটি না ছড়িয়ে কার্যকর করা হবে।
কিছু ক্ষেত্রে এটি দরকারী, কিছু ক্ষেত্রে - মোটেও নয়, তবে এটি একটি সত্য যে জ্যাকোয়ারিটি ভাল, খালি-ম্যাচ-বান্ধব হতে থাকে। এখনো,replaceWith কেউ যদি কোনও উপাদানটিকে নথির সাথে সম্পর্কিত না করে এটির সাথে ব্যবহার করার চেষ্টা করে তবে একটি ত্রুটি ফেলবে। আমি এটিকে বরং স্ব-স্বজ্ঞাত বলে মনে করি।
আরেকটি ক্ষতি হ'ল, আমার মতে, নোডের ক্রমটি পূর্বে সমস্ত () পদ্ধতি দ্বারা ফিরে এসেছে - $('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()। আসলে কোনও বড় বিষয় নয়, তবে আমাদের এই সত্যটি মাথায় রাখা উচিত।
যদি আপনি অজ্যাক্সে প্রচুর ডেটাতে পরিকল্পনা করেন, যেমন ধরুন, 20 টি কলাম সহ একটি টেবিলের 1500 সারি, তবে আপনার এইচটিএমএলতে ডেটা jোকাতে jQuery ব্যবহার করার কথা ভাবেন না। সরল জাভাস্ক্রিপ্ট ব্যবহার করুন। jQuery ধীর মেশিনে খুব ধীর হবে।
এছাড়াও, অর্ধবার jQuery এমন জিনিসগুলি করবে যা আসন্ন এইচটিএমএলে স্ক্রিপ্ট ট্যাগগুলি বিশ্লেষণ করার চেষ্টা করার মতো এবং এটি ব্রাউজারের কিরকগুলি মোকাবেলার মতো ধীর করে দেবে। আপনি যদি দ্রুত সন্নিবেশের গতি চান তবে প্লেইন জাভাস্ক্রিপ্টের সাথে লেগে থাকুন।
.innerHTMLকরবেন। তবে আপনি যদি Gmail এর মতো এমন কিছু তৈরি করেন যেখানে ব্যবহারকারী কয়েক ঘন্টার জন্য এই ট্যাবটি খোলা রাখে, আপনাকে কেবল বুলেটটি কামড়তে হবে এবং অতিরিক্ত আস্তে সামলাতে হবে। কৌতূহলের জন্য, এখানে jQuery এর ঠিক কী করছে .html(): james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.html
একটি ছোট প্রকল্পে jQuery ব্যবহার করে যা সাধারণ জাভাস্ক্রিপ্টের কয়েকটি লাইন দিয়ে সম্পূর্ণ করা যায়।
couple of lines of ordinary JavaScriptঅবশ্যই, কোনো সমস্যা নেই. তবে কখন কখন তা ঠিক হয়? যে লোকেরা "ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করবেন না কেন ??" আইই এখনও যথেষ্ট শক্তভাবে কামড়ায় নি ... এবং সাধারণ পুরানো জেএসে সাধারণ জিনিসগুলি করতে আপনাকে কতটা ক্রাফ্ট এবং বয়লারপ্লেট কোড লিখতে হবে তা উল্লেখ না করে।
ইভেন্টের বাইন্ডিং বোঝা যাচ্ছে না। জাভাস্ক্রিপ্ট এবং jQuery আলাদাভাবে কাজ করে।
জনপ্রিয় চাহিদা অনুসারে, একটি উদাহরণ:
JQuery এ:
$("#someLink").click(function(){//do something});
JQuery ছাড়া:
<a id="someLink" href="page.html" onClick="SomeClickFunction(this)">Link</a>
<script type="text/javascript">
SomeClickFunction(item){
//do something
}
</script>
মূলত জাভাস্ক্রিপ্টের জন্য প্রয়োজনীয় হুকগুলির আর প্রয়োজন নেই। অর্থাত্ ইনলাইন মার্কআপ (অনক্লিক ইত্যাদি) ব্যবহার করুন কারণ আপনি কেবল আইডি এবং ক্লাসগুলি ব্যবহার করতে পারেন যা সাধারণত কোনও বিকাশকারী সিএসএসের উদ্দেশ্যে সাধারণত লাভ করতে পারে।