jQuery 3 এ সমস্যা নেই
JQuery 3.0 রিভিশনগুলিতে তালিকাভুক্ত পরিবর্তনগুলির মধ্যে একটি:
এসভিজি বর্গ হেরফের যোগ করুন ( # 2199 , 20aa33 )
এই ইস্যুটির একটি সমাধান হ'ল jQuery 3 এ আপগ্রেড করা এটি দুর্দান্ত কাজ করে:
var flip = true;
setInterval(function() {
// Could use toggleClass, but demonstrating addClass.
if (flip) {
$('svg circle').addClass('green');
}
else {
$('svg circle').removeClass('green');
}
flip = !flip;
}, 1000);
svg circle {
fill: red;
stroke: black;
stroke-width: 5;
}
svg circle.green {
fill: green;
}
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<svg>
<circle cx="50" cy="50" r="25" />
</svg>
সমস্যাটি:
JQuery শ্রেণীর কারসাজি কার্যগুলি SVG উপাদানগুলির সাথে কাজ না করার কারণটি হল 3.0 এর পূর্বে jQuery সংস্করণগুলি className
এই ফাংশনগুলির জন্য সম্পত্তি ব্যবহার করে ।
cur = elem.nodeType === 1 && ( elem.className ?
( " " + elem.className + " " ).replace( rclass, " " ) :
" "
);
এটি এইচটিএমএল উপাদানগুলির জন্য প্রত্যাশার মতো আচরণ করে তবে এসভিজি উপাদানগুলির className
জন্য কিছুটা আলাদা। কোনও এসভিজি উপাদানটির জন্য, className
স্ট্রিং নয়, এর উদাহরণ SVGAnimatedString
।
নিম্নলিখিত কোড বিবেচনা করুন:
var test_div = document.getElementById('test-div');
var test_svg = document.getElementById('test-svg');
console.log(test_div.className);
console.log(test_svg.className);
#test-div {
width: 200px;
height: 50px;
background: blue;
}
<div class="test div" id="test-div"></div>
<svg width="200" height="50" viewBox="0 0 200 50">
<rect width="200" height="50" fill="green" class="test svg" id="test-svg" />
</svg>
আপনি যদি এই কোডটি চালান তবে আপনি আপনার বিকাশকারী কনসোলে নিম্নলিখিতগুলির মতো কিছু দেখতে পাবেন।
test div
SVGAnimatedString { baseVal="test svg", animVal="test svg"}
যদি আমরা সেই SVGAnimatedString
বস্তুকে jQuery এর মতো স্ট্রিংয়ের মধ্যে ফেলে দিতে পারি তবে আমাদের কাছে [object SVGAnimatedString]
যা jQuery ব্যর্থ হয়েছিল।
কীভাবে jQuery এসভিজি প্লাগইন এটি পরিচালনা করে:
JQuery এসভিজি প্লাগইন এসভিজি সমর্থন যুক্ত করতে প্রাসঙ্গিক ফাংশনগুলি প্যাচ করে এর চারপাশে কাজ করে।
function getClassNames(elem) {
return (!$.svg.isSVGElem(elem) ? elem.className :
(elem.className ? elem.className.baseVal : elem.getAttribute('class'))) || '';
}
এই ফাংশনটি সনাক্ত করবে যে কোনও উপাদান কোনও এসভিজি উপাদান কিনা, এবং যদি এটি থাকে তবে বৈশিষ্ট্যের পিছনে নেমে যাওয়ার আগে যদি এটি উপলব্ধ থাকে baseVal
তবে SVGAnimatedString
বস্তুর সম্পত্তিটি ব্যবহার করবে class
।
ইস্যুতে jQuery এর historicalতিহাসিক অবস্থান:
jQuery বর্তমানে তাদের উইন ফিক্স পৃষ্ঠায় এই সমস্যাটি তালিকাবদ্ধ করে । এখানে প্রাসঙ্গিক অংশ।
এসভিজি / ভিএমএল বা নেমস্পিড এলিমেটস বাগগুলি
jQuery মূলত এইচটিএমএল ডিওএম এর জন্য একটি গ্রন্থাগার, সুতরাং এসভিজি / ভিএমএল নথি বা নেমস্পিডের উপাদানগুলির সাথে সম্পর্কিত বেশিরভাগ সমস্যার সুযোগ নেই। আমরা এইচটিএমএল নথিগুলিতে "রক্তপাত" হওয়া সমস্যাগুলি সমাধান করার চেষ্টা করি, যেমন এসভিজি থেকে বেরিয়ে আসা ইভেন্টগুলি।
স্পষ্টতই jQuery jQuery কোর এর ক্ষেত্রের বাইরে পূর্ণ এসভিজি সমর্থন হিসাবে বিবেচিত এবং প্লাগইনগুলির জন্য আরও উপযুক্ত।