গৃহীত উত্তর শো খুব পথ জটিল। যেমন ফরেস্টো তার উত্তরে দাবি করেছে , " মনে হয় এগুলি ডিওএম এক্সপ্লোরারগুলিতে যুক্ত হয়, তবে স্ক্রিনে নয় " এবং এর কারণ এইচটিএমএল এবং এসভিজি-র বিভিন্ন নাম স্থান।
সবচেয়ে সহজ কাজটি হ'ল সম্পূর্ণ এসভিজি "রিফ্রেশ" করা। বৃত্ত (বা অন্যান্য উপাদান) যুক্ত করার পরে, এটি ব্যবহার করুন:
$("body").html($("body").html());
এই কৌশলটি করে। বৃত্তটি পর্দায় রয়েছে on
অথবা আপনি যদি চান তবে একটি ধারক ডিভ ব্যবহার করুন:
$("#cont").html($("#cont").html());
এবং আপনার এসটিজি কনটেইনার ডিভের অভ্যন্তরে মুড়িয়ে দিন:
<div id="cont">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100" width="200px" height="100px">
</svg>
</div>
কার্যকরী উদাহরণ:
http://jsbin.com/ejifab/1/edit
এই কৌশলটির সুবিধা:
- আপনি বিদ্যমান এসভিজি (এটি ইতিমধ্যে ডোমে রয়েছে) সম্পাদনা করতে পারেন, যেমন। রাফেল ব্যবহার করে তৈরি করা হয়েছে বা স্ক্রিপ্ট না করে আপনার উদাহরণে "হার্ড কোডড"।
- আপনি স্ট্রিং যেমন জটিল উপাদান কাঠামো যোগ করতে পারেন।
$('svg').prepend('<defs><marker></marker><mask></mask></defs>');
আপনি jQuery করতে চান।
- উপাদানগুলি সংযুক্ত করে
$("#cont").html($("#cont").html());
তাদের বৈশিষ্ট্যগুলি ব্যবহার করে স্ক্রিনে দৃশ্যমান করার পরে jQuery ব্যবহার করে সম্পাদনা করা যেতে পারে।
সম্পাদনা করুন:
উপরের কৌশলটি কেবল "হার্ড কোডড" বা ডিওএম ম্যানিপুলেটেড (= ডকুমেন্ট। ক্রিয়েটেলমেন্টএনএস ইত্যাদি) এসভিজির সাথে কাজ করে। যদি রাফেলগুলি উপাদান তৈরি করার জন্য ব্যবহৃত হয়, (আমার পরীক্ষাগুলি অনুসারে) রাফেল অবজেক্ট এবং এসভিজি ডোমের মধ্যে লিঙ্ক $("#cont").html($("#cont").html());
ব্যবহার করা থাকলে তা ভাঙা । এটির মত কাজটি মোটেও ব্যবহার $("#cont").html($("#cont").html());
করা নয় এবং এর পরিবর্তে এটি ডামি এসভিজি ডকুমেন্ট ব্যবহার করে।
এই ডামি এসভিজি প্রথমে এসভিজি নথির একটি পাঠ্য উপস্থাপনা এবং এতে কেবলমাত্র প্রয়োজনীয় উপাদান রয়েছে। আমরা চাই যেমন। রাফেল নথিতে একটি ফিল্টার উপাদান যুক্ত করতে, ডামি কিছু হতে পারে <svg id="dummy" style="display:none"><defs><filter><!-- Filter definitons --></filter></defs></svg>
। পাঠ্য উপস্থাপনাটি প্রথমে jQuery এর $ ("বডি") ব্যবহার করে অ্যাপেড () পদ্ধতি ব্যবহার করে ডিওমে রূপান্তরিত হয়। এবং যখন (ফিল্টার) উপাদানটি ডিওমে থাকে, তখন এটি স্ট্যান্ডার্ড জ্যাকুয়েরি পদ্ধতি ব্যবহার করে অনুসন্ধান করা যেতে পারে এবং রাফেল দ্বারা নির্মিত প্রধান এসভিজি নথিতে সংযুক্ত করা যায়।
এই ডামি দরকার কেন? রাফেল তৈরি করা নথিতে কঠোরভাবে কোনও ফিল্টার উপাদান যুক্ত করবেন না কেন? যদি আপনি এটি ব্যবহার করে চেষ্টা করুন। $("svg").append("<circle ... />")
, এটি এইচটিএমএল উপাদান হিসাবে তৈরি করা হয়েছে এবং উত্তরে বর্ণিত হিসাবে স্ক্রিনে কিছুই নেই। তবে যদি পুরো এসভিজি ডকুমেন্টটি সংযুক্ত করা হয় তবে ব্রাউজারটি স্বয়ংক্রিয়ভাবে এসভিজি ডকুমেন্টের সমস্ত উপাদানগুলির নেমস্পেস রূপান্তর পরিচালনা করে।
একটি উদাহরণ কৌশল আলোকিত:
// Add Raphael SVG document to container element
var p = Raphael("cont", 200, 200);
// Add id for easy access
$(p.canvas).attr("id","p");
// Textual representation of element(s) to be added
var f = '<filter id="myfilter"><!-- filter definitions --></filter>';
// Create dummy svg with filter definition
$("body").append('<svg id="dummy" style="display:none"><defs>' + f + '</defs></svg>');
// Append filter definition to Raphael created svg
$("#p defs").append($("#dummy filter"));
// Remove dummy
$("#dummy").remove();
// Now we can create Raphael objects and add filters to them:
var r = p.rect(10,10,100,100);
$(r.node).attr("filter","url(#myfilter)");
এই কৌশলটির সম্পূর্ণ কার্যকারী ডেমোটি এখানে রয়েছে: http://jsbin.com/ilinan/1/edit ।
(আমার (এখনও) ধারণা নেই, $("#cont").html($("#cont").html());
রাফেল ব্যবহার করার সময় কেন কাজ করে না। এটি খুব ছোট হ্যাক হবে))
RMB
>edit as html
এইচটিএমএল ট্যাগে থাকি এবং হিট করি তবে সমস্ত কিছু প্রদর্শন করে (তবে সমস্ত ইভেন্ট শ্রোতা অদৃশ্য হয়ে যায়)। এই উত্তরটি পড়ার পরে আমি আমার ক্রিয়েট এলিমেন্ট কলগুলি ক্রিয়েলেমেন্টএনএস-তে পরিবর্তন করেছি এবং এখন সবকিছু কাজ করে!