বলুন আমার খালি ডিভ আছে:
<div id='myDiv'></div>
এটি কি:
$('#myDiv').html("<div id='mySecondDiv'></div>");
হিসাবে একই:
var mySecondDiv=$("<div id='mySecondDiv'></div>");
$('#myDiv').append(mySecondDiv);
বলুন আমার খালি ডিভ আছে:
<div id='myDiv'></div>
এটি কি:
$('#myDiv').html("<div id='mySecondDiv'></div>");
হিসাবে একই:
var mySecondDiv=$("<div id='mySecondDiv'></div>");
$('#myDiv').append(mySecondDiv);
উত্তর:
আপনি যখনই jQuery এর যে কোনও পদ্ধতিতে এইচটিএমএল একটি স্ট্রিং পাস করেন, যা ঘটে তা ঘটে:
একটি অস্থায়ী উপাদান তৈরি করা হয়, আসুন এটি এক্স বলুন। x এর innerHTMLএইচটিএমএল এর স্ট্রিংটিতে সেট করা আছে যা আপনি পেরিয়ে গেছেন। তারপরে jQuery উত্পাদিত প্রতিটি নোডের (যা x এর childNodes) প্রতিটি নতুন তৈরি করা নথি খণ্ডে স্থানান্তরিত করবে , যা এটি পরবর্তী সময়ের জন্য ক্যাশে করবে will তারপরে এটি খণ্ডটিকে childNodesএকটি নতুন টাওম সংগ্রহ হিসাবে ফিরিয়ে দেবে ।
মনে রাখবেন যে এটি আসলে এর চেয়ে অনেক জটিল, কারণ jQuery ক্রস ব্রাউজারের চেক এবং অন্যান্য বিভিন্ন অপ্টিমাইজেশন করে। যেমন যদি আপনি শুধু পাস <div></div>করার জন্য jQuery(), jQuery এর একটি শর্টকাট নিতে হবে কেবল না document.createElement('div')।
সম্পাদনা : jQuery সম্পাদন করে এমন চেকগুলির নিখুঁত পরিমাণটি দেখতে, এখানে , এখানে এবং এখানে একবার দেখুন ।
innerHTMLএটি সাধারণত দ্রুত পদ্ধতির হয়, যদিও এটি আপনি সমস্ত সময় যা পরিচালনা করেন তা নিয়ন্ত্রণ করতে দেবেন না। jQuery এর দৃষ্টিভঙ্গি ততটা সহজ নয় element.innerHTML = ...- যেমনটি আমি উল্লেখ করেছি, সেখানে প্রচুর পরিমাণে চেক এবং অপটিমাইজেশন ঘটছে।
সঠিক কৌশলটি পরিস্থিতির উপর খুব বেশি নির্ভর করে। যদি আপনি প্রচুর পরিমাণে অভিন্ন উপাদান তৈরি করতে চান তবে সর্বশেষে আপনি যা করতে চান তা হ'ল একটি বিশাল লুপ তৈরি করে প্রতিটি পুনরাবৃত্তিতে একটি নতুন জিকুয়েরি অবজেক্ট তৈরি করা। যেমন jQuery দিয়ে 100 ডিভ তৈরির দ্রুততম উপায়:
jQuery(Array(101).join('<div></div>'));
বিবেচনায় নেওয়ার জন্য পাঠযোগ্যতা এবং রক্ষণাবেক্ষণের বিষয়গুলিও রয়েছে।
এই:
$('<div id="' + someID + '" class="foobar">' + content + '</div>');
... এটির তুলনায় অনেক কঠিন:
$('<div/>', {
id: someID,
className: 'foobar',
html: content
});
101100 আঠা থাকবে আবেদন করেছিলেন, মাত্র 3 উপাদান যোগদান 2 আঠা হবে মত: EL-glue-EL-glue-EL। জেমসের উদাহরণে অ্যারে উপাদানগুলি "খালি" তাই এন খালি উপাদানগুলিতে যোগদানের ফলে টানা N-1 টি আঠালো হয়।
তারা একই নয়। প্রথমটি প্রথমে অন্য jQuery অবজেক্ট তৈরি না করে HTML প্রতিস্থাপন করে। দ্বিতীয়, দ্বিতীয় DIV আছে জন্য একটি অতিরিক্ত jQuery এর মোড়কের সৃষ্টি তারপর appends প্রথম থেকে এটি।
একটি jQuery আবরণ (উদাহরণস্বরূপ):
$("#myDiv").html('<div id="mySecondDiv"></div>');
$("#myDiv").append('<div id="mySecondDiv"></div>');
দুটি jQuery আবরণ (উদাহরণস্বরূপ):
var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').html(mySecondDiv);
var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').append(mySecondDiv);
আপনার কয়েকটি পৃথক ব্যবহারের মামলা চলছে। আপনি যদি সামগ্রীটি প্রতিস্থাপন করতে চান তবে .htmlএটির সমতুল্য হওয়ার জন্য একটি দুর্দান্ত কল innerHTML = "..."। তবে, আপনি যদি কেবল বিষয়বস্তু সংযোজন করতে চান তবে অতিরিক্ত $()মোড়কের সেটটি অনিবদ্ধ করা হয়েছে।
আপনার যদি divপরে যুক্ত হওয়াতে হেরফের করতে হয় তবে কেবল দুটি র্যাপার ব্যবহার করুন। এমনকি সেক্ষেত্রে আপনার এখনও কেবল একটি ব্যবহারের প্রয়োজন হতে পারে:
var mySecondDiv = $("<div id='mySecondDiv'></div>").appendTo("#myDiv");
// other code here
mySecondDiv.hide();
যদি .addআপনার অর্থ হয় .append, তবে #myDivখালি থাকলে ফলাফলটি একই the
পারফরম্যান্স কি একই রকম? জানি না
.html(x) হিসাবে একই জিনিস শেষ .empty().append(x)
ভাল, .html()ব্যবহারগুলি .innerHTMLযা ডিওএম তৈরির চেয়ে দ্রুত ।
আপনি একই পদ্ধতি অর্জনের জন্য দ্বিতীয় পদ্ধতিটি পেতে পারেন:
var mySecondDiv = $('<div></div>');
$(mySecondDiv).find('div').attr('id', 'mySecondDiv');
$('#myDiv').append(mySecondDiv);
লুকা উল্লেখ করেছে যে html()কেবল hte এইচটিএমএল সন্নিবেশ করায় যার ফলে দ্রুত কার্য সম্পাদন হয় in
কিছু ক্ষেত্রে যদিও, আপনি দ্বিতীয় বিকল্পটি বেছে নেবেন, বিবেচনা করুন:
// Clumsy string concat, error prone
$('#myDiv').html("<div style='width:'" + myWidth + "'px'>Lorem ipsum</div>");
// Isn't this a lot cleaner? (though longer)
var newDiv = $('<div></div>');
$(newDiv).find('div').css('width', myWidth);
$('#myDiv').append(newDiv);
px$('<div />', { width: myWidth }).appendTo("#myDiv");
প্রদত্ত উত্তরগুলি ব্যতীত আপনার কাছে এরকম কিছু রয়েছে:
<div id="test">
<input type="file" name="file0" onchange="changed()">
</div>
<script type="text/javascript">
var isAllowed = true;
function changed()
{
if (isAllowed)
{
var tmpHTML = $('#test').html();
tmpHTML += "<input type=\"file\" name=\"file1\" onchange=\"changed()\">";
$('#test').html(tmpHTML);
isAllowed = false;
}
}
</script>
এর অর্থ হ'ল যে কোনও ফাইল আপলোড করা থাকলে আপনি স্বয়ংক্রিয়ভাবে আরও একটি ফাইল আপলোড যুক্ত করতে চান, উল্লিখিত কোডটি কাজ করবে না, কারণ ফাইলটি আপলোড হওয়ার পরে, প্রথম ফাইল-আপলোড উপাদান পুনরায় তৈরি করা হবে এবং তাই আপলোড করা ফাইলটি এটি থেকে মুছে ফেলা হবে । পরিবর্তে আপনার .append () ব্যবহার করা উচিত:
function changed()
{
if (isAllowed)
{
var tmpHTML = "<input type=\"file\" name=\"file1\" onchange=\"changed()\">";
$('#test').append(tmpHTML);
isAllowed = false;
}
}
আমার সাথে এই ঘটনা ঘটেছে। জেকারি সংস্করণ: 3.3। আপনি যদি কোনও অবজেক্টের তালিকার বাইরে চলে যাচ্ছেন এবং প্রতিটি বস্তুকে কিছু পিতা বা মাতা ডোমের উপাদান হিসাবে যোগ করতে চান তবে .html এবং .append খুব আলাদা আচরণ করবে। .htmlপিতামণ্ডলের উপাদানটিতে কেবলমাত্র শেষ অবজেক্ট যুক্ত করা শেষ হবে, যেখানে .appendসমস্ত তালিকার অবজেক্টগুলিকে পিতামণ্ডলের উপাদান হিসাবে যুক্ত করা হবে।