ডেটা-অ্যাট্রিবিউট মানটি আপডেট করতে পারে না


91

যদিও ওয়েবে এটি সম্পর্কে কয়েকটি উদাহরণ রয়েছে তবে এটি সঠিকভাবে কাজ করছে বলে মনে হয় না। আমি সমস্যাটি বুঝতে পারি না।

আমি এই সহজ এইচটিএমএল আছে

         <div id="foo" data-num="0"></ div>
         <a href="#" id="changeData">change data value</a>

প্রতিবার আমি "ডাটা মান পরিবর্তন করুন" লিঙ্কটি ক্লিক করি আমি ডেটা-নাম্বারের ডেটা মান আপডেট করতে চাই। উদাহরণস্বরূপ, আমার এটি দরকার 1,2,3,4, ... (প্লাস 1 প্রতিবার আমি লিঙ্কটি ক্লিক করি)

আমার যা আছে তা

            var num = $('#foo').data("num");
            console.log(num);
            num = num+1;               
            console.log(num);
            $('#foo').attr('data-num', num);   

মানটি প্রতিবার 0 থেকে 1 এর মধ্যে পরিবর্তিত হয়। আমি এটিকে বর্ধিত করতে পারি না। কোন পরামর্শ আমি কি ভুল করছি?


4
ডেটা- কেবল পৃষ্ঠা লোডের একটি বৈশিষ্ট্য। ডেমে ডোমে লোড করা হয় এবং সেখানে ব্যবহার করে ম্যানিপুলেট করা হয় .data()। বৈশিষ্ট্যটি আপডেট হয় না এবং কেবলমাত্র ডেটা সেট করতে প্রাথমিকভাবে ডেটা সঞ্চয় বা পুনরুদ্ধারে ব্যবহার করা উচিত নয়।
নাইজেল এঞ্জেল

4
@ নিগেলএঞ্জেল ভুল ডেটা অ্যাট্রিবিউটটির উদ্দেশ্য হ'ল এমন কোনও উপায় সরবরাহ করা যার মাধ্যমে ব্যবহারকারীরা স্বেচ্ছাসেবীর ডেটা সংরক্ষণ করতে (এবং সংশোধন করতে) যাতে অন্য কোনও বৈধ স্থান নেই। দশমিক পয়েন্ট যখন কমা হয় তখন এর উদাহরণ বৈদেশিক মুদ্রার জন্য হবে। এর সাথে সংখ্যার গণনা করতে আপনার কোথাও একটি আসল দশমিক পয়েন্ট সহ একটি সঠিক মান সঞ্চয় করতে হবে। যদি এটি মোট দাম হয় এবং পরিবর্তনের উপর ভিত্তি করে আপডেট করা প্রয়োজন তবে আবার এই ডেটার মানটি পরিবর্তন করতে হবে এবং তাই আপনাকে এটি আপডেট করতে সক্ষম হতে হবে। এর জন্য, আপনি .attr ()
জিজিপিন

উত্তর:


64

উত্তর নীচে ভাল এক

আপনি ডেটা পদ্ধতিটি সঠিকভাবে ব্যবহার করছেন না । ডেটা আপডেট করার জন্য সঠিক কোডটি হ'ল:

$('#foo').data('num', num); 

সুতরাং আপনার উদাহরণটি হ'ল:

var num = $('#foo').data("num") + 1;       
console.log(num)       
$('#foo').data('num', num); 
console.log(num)

97
এটি ভুল, এটি একটি
বিশেষত্ব

4
হ্যাঁ আমি আপনার সাথে @ অ্যাডিনিওর সাথে একমত কিন্তু তিনি ডেটা পদ্ধতিটি সঠিকভাবে ব্যবহার করছেন না। আপনি যদি এট্রি পদ্ধতিতে এটি আপডেট করতে চান তবে এই জাতীয় বৈশিষ্ট্যটি কেন ব্যবহার করবেন?
লুকাস উইলেস

@ দেব আমি আমার উত্তর সম্পাদনা করেছি এবং আপনাকে ব্যবহার করতে হবে এমন পুরো কোডটি যোগ করুন।
লুকাস উইলেস

7
এটা মজার. আমি দেখতে পাচ্ছি যে কনসোলে মান পরিবর্তন হয়। আমি যখন ক্রোম ব্যবহার করে এইচটিএমএল দেখি তখন এটি 0 (প্রাথমিক) হয়। আমি অনুমান করি ঠিক আছে যদি পরে আমি শেষ মানটি পুনরুদ্ধার করতে পারি (উদাহরণস্বরূপ 5)
দেব

6
@ দেবদেব বলেছিলেন যে আমি চেষ্টা করেছি এবং দেখেছি এটি jQuery এ পরিবর্তিত হয়েছে তবে ক্রোম এবং সাফারিতে এইচটিএমএলকে প্রভাবিত করে না। সুতরাং আমি অ্যাটর () বরং ডেটা () ব্যবহার করার সিদ্ধান্ত নিয়েছি।
কিউমাস্টার

118

পরিবর্তে এটি ব্যবহার করুন, আপনি যদি নোড এলিমেন্টের নয়, ডেটা অবজেক্টের বৈশিষ্ট্যযুক্ত ডেটা-সংখ্যা পরিবর্তন করতে চান :

ডেমো

$('#changeData').click(function (e) { 
    e.preventDefault();
    var num = +$('#foo').attr("data-num");
    console.log(num);
    num = num + 1;
    console.log(num);
    $('#foo').attr('data-num', num);
});

PS: তবে আপনার কার্যত সমস্ত ক্ষেত্রে ডেটা () অবজেক্টটি ব্যবহার করা উচিত, তবে সমস্ত নয় ...


7
ডেটা ডোমে লোড করা হয় এবং .data () ব্যবহার করে সেখানে ম্যানিপুলেট করা হয়। বৈশিষ্ট্যটি আপডেট হয় না এবং কেবলমাত্র ডেটা সেট করতে প্রাথমিকভাবে ডেটা সঞ্চয় বা পুনরুদ্ধারে ব্যবহার করা উচিত নয়। যদিও এটি কোনও বৈশিষ্ট্য পরিবর্তন করার এক উপায় ( .prop()পছন্দসই), এটি ডেটা ব্যবহারের সঠিক উপায় নয়।
নাইজেল অ্যাঞ্জেল

4
.prop()ডিওমে কোনও সম্পত্তি বা বৈশিষ্ট্যের মান অ্যাক্সেস বা পরিবর্তন করতে হবে তবে এইচটিএমএল নয়। .attr()এইচটিএমএল অ্যাক্সেস এবং পুনর্লিখন করবে যা এর চেয়ে ধীর করে তোলে .prop()। আপনার .attr()পরিবর্তে আপনার ব্যবহার করা উচিত নয় .data(), এটি কেবল ধীর হওয়ার কারণে নয়, কারণ এটি কীভাবে কাজ করার কথা তা নয়। jsfiddle.net/eXA76/2
নাইজেল অ্যাঞ্জেল

4
আমি মনে করি এই উত্তরটি মুছে ফেলা উচিত কারণ এটি ডেটা () ব্যবহার করার ক্ষেত্রে খারাপ পরামর্শ দেয়।
নাইজেল অ্যাঞ্জেল

4
হ্যাঁ, এটি কীভাবে ব্যবহার করার কথা সে সম্পর্কে jQuery ডক্স! api.jquery.com/data ডেটা ডকুমেন্ট লোডে একটি বৈশ্বিক চলকগুলিতে সংরক্ষণ করা হয়। অন্য কোনও বিকাশকারী, প্লাগইন বা স্ক্রিপ্ট সঠিকভাবে ব্যবহার করে ডেটা আপডেট করে তবে এই বৈশিষ্ট্যটির মাধ্যমে এটি কাজ করবে না .data()। সঠিক পদ্ধতিটিকে উপেক্ষা করে এবং বৈশিষ্ট্যটি ব্যবহার করে আপনি জেনেশুনে সমস্যা তৈরির দিকে এগিয়ে যাচ্ছেন।
নাইজেল এঞ্জেল

4
@ নাইজেলএঞ্জেল এই বিষয়ে আমি আপনার মতামতের প্রশংসা করি, তথ্য ব্যবহারের জন্য সর্বদা সর্বোত্তম বিকল্প নয়। আপনার যদি কোনও ডেটা অ্যাট্রিবিউটের মান আপডেট করার প্রয়োজন হয় এবং এটি ডোমটিতে প্রদর্শিত হয় পাশাপাশি সিএসএস বা এমনকি জাভাস্ক্রিপ্ট দ্বারা ব্যবহৃত অন্তর্নিহিত মান পরিবর্তন করে থাকে তবে কী হবে? আপনি জাভাস্ক্রিপ্ট থেকে কোনওভাবে মান আপডেট না করে তবে .ডাটা () ব্যবহার করার পক্ষে সর্বোত্তম পন্থাটি হ'ল আপনি যদি সর্বদা থাকেন তবে সর্বদা সেট সেট এবং মান পুনরুদ্ধার করতে .attr () ব্যবহার করুন।
জিজিপিন

30

যদি আমরা বিদ্যমান, নেটিভ জাভাস্ক্রিপ্ট ব্যবহার করে এই বৈশিষ্ট্যগুলি পুনরুদ্ধার বা আপডেট করতে চাই , তবে আমরা নীচের বর্ণিত পদ্ধতিগুলি getAttributeএবং setAttributeপদ্ধতিগুলি ব্যবহার করে এটি করতে পারি :

জাভাস্ক্রিপ্ট

<script>
// 'Getting' data-attributes using getAttribute
var plant = document.getElementById('strawberry-plant');
var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12'

// 'Setting' data-attributes using setAttribute
plant.setAttribute('data-fruit','7'); // Pesky birds
</script>

JQuery মাধ্যমে

// Fetching data
var fruitCount = $(this).data('fruit');

// Above does not work in firefox. So use below to get attribute value.
var fruitCount = $(this).attr('data-fruit');

// Assigning data
$(this).data('fruit','7');

// But when you get the value again, it will return old value. 
// You have to set it as below to update value. Then you will get updated value.
$(this).attr('data-fruit','7'); 

ভ্যানিলা js এর জন্য এই ডকুমেন্টেশন বা jquery এর জন্য এই ডকুমেন্টেশন পড়ুন


@ নিজেল অ্যাঞ্জেল, আপনি কি এটি ফায়ার ফক্সে পরীক্ষা করেছেন? this (এটি) .ডাটা ('ফল') ফায়ারফক্সে কাজ করে না।
ললিত কুমার

আপনাকে অনেক গত পরামর্শের জন্য ধন্যবাদ "আপনি আপডেটটি মান নিচে হিসাবে সেট করতে হবে তারপর আপনি আপডেট করা হবে মান।" JQuery মধ্যে rly অদ্ভুত আচরণের ..
jgr

12

আমার জন্য, জ্যাকুরি লাইব 2.1.1 ব্যবহার করে নিম্নলিখিতটি আমার প্রত্যাশার মতো কার্যকর হয়নি:

উপাদান ডেটা বৈশিষ্ট্য মান সেট করুন:

$('.my-class').data('num', 'myValue');
console.log($('#myElem').data('num'));// as expected = 'myValue'

তবে উপাদানটি অ্যাট্রিবিউট ব্যতীতই থেকে যায়:

<div class="my-class"></div>

আমার ডিওএম আপডেট হওয়া দরকার যাতে আমি পরে $ ('। আমার-শ্রেণীর [ডেটা-নাম্বার "" আমারভ্যালু "]') করতে পারি // বর্তমান দৈর্ঘ্য 0

তাই আমাকে করতে হয়েছিল

$('.my-class').attr('data-num', 'myValue');

DOM আপডেট করার জন্য:

<div class="my-class" data-num="myValue"></div>

বৈশিষ্ট্যটি বিদ্যমান কিনা বা না $ .attr ওভাররাইট হবে।


4
আমি jquery 2.1.1 সঙ্গে একই সমস্যা!
phlegx

8

একই সমস্যা ছিল এবং শেষ পর্যন্ত আমাকে উভয় সেট করতে হয়েছিল

obj.attr('data-myvar','myval')

এবং

obj.data('myvar','myval')

এবং এই পরে

obj.data('myvar') == obj.attr('data-myvar')

আশাকরি এটা সাহায্য করবে.


6

মূলত, ডেটা অ্যাট্রিবিউট মান সেট / আপডেট করার দুটি উপায় রয়েছে যা আপনার প্রয়োজনের উপর নির্ভর করে। পার্থক্যটি কেবলমাত্র যেখানে ডেটা সংরক্ষণ করা হয়েছে,

আপনি যদি .data()এটি ব্যবহার করেন তবে এটি স্থানীয় ভেরিয়েবল নামে ডাকা হবে data_userএবং এটি উপাদান তদন্তে দৃশ্যমান নয়, আপনি যদি .attr()এটি ব্যবহার করেন তবে এটি সর্বজনীনভাবে দৃশ্যমান হবে।

এই মন্তব্য সম্পর্কে আরও স্পষ্ট ব্যাখ্যা


2

এই উত্তরটি তাদের জন্য যারা কেবলমাত্র একটি ডেটা-অ্যাট্রিবিটির মান পরিবর্তন করতে চান

প্রস্তাবিত আপনার Jquery ডেটা-অ্যাটর এর মান ঠিকমতো বদলাবে না যেমন @ অ্যাডিনিও বলেছেন। যদিও কিছু কারণে, আমি তাকে (বা অন্য কোনও) তাদের ডেটা-অ্যাটর আপডেট করার জন্য সঠিক পদ্ধতি পোস্ট করে দেখছি না। @ লুকাস উইলেমস পোস্ট করেছেন যে উত্তরটি ব্রায়ান টম্পসেট - 汤 having এর সমস্যার উত্তর হতে পারে, তবে এটি অন্য ব্যবহারকারীদের এখানে আনতে পারে এমন তদন্তের উত্তর নয়।

মূল তদন্তের বিবৃতিতে দ্রুত উত্তর

- ডেটা-অ্যাটর আপডেট করতে

$('#ElementId').attr('data-attributeTitle',newAttributeValue);

সহজ ভুল * - আপনার বৈশিষ্ট্যের শুরুতে অবশ্যই "ডেটা-" থাকা উচিত যা আপনি এর মান পরিবর্তন করতে চাইছেন।


2

একটি অনুরূপ সমস্যা ছিল, আমি প্রস্তাব করি এই সমাধানটি আইথ 10 এবং এর চেয়ে কম বয়সীগুলিতে সমর্থিত নয়।

দেওয়া হয়েছে

<div id='example' data-example-update='1'></div>

জাভাস্ক্রিপ্ট স্ট্যান্ডার্ড ডেটা-উদাহরণ-আপডেট আপডেট করতে ডেটাসেট নামে একটি সম্পত্তি সংজ্ঞায়িত করে।

document.getElementById('example').dataset.exampleUpdate = 2;

দ্রষ্টব্য: সঠিক ডেটা অ্যাট্রিবিউট অ্যাক্সেস করতে উটের মামলার স্বরলিপি ব্যবহার করুন।

সূত্র: https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes


1

আমি যখন jquery ব্যবহার করছিলাম তখন এইচটিএমএল ডেটা ট্যাগ আপডেট করার ক্ষেত্রে একই সমস্যা ছিল তবে কোডটি পরিবর্তন করে যা জ্যাকুয়ারি থেকে জাভাস্ক্রিপ্টে আসল কাজ করে।

বোতামটি ক্লিক করা হলে এটি ব্যবহার করার চেষ্টা করুন: (নোট করুন যে মূল কোডটি জাভাস্ক্রিপ্টস সেটআট্রিবিউট () ফাংশন)

function increment(q) {

    //increment current num by adding with 1
    q = q+1;

    //change data attribute using JS setAttribute function
    div.setAttribute('data-num',q);

    //refresh data-num value (get data-num value again using JS getAttribute function)
    num = parseInt(div.getAttribute('data-num'));

    //show values
    console.log("(After Increment) Current Num: "+num);

}

//get variables, set as global vars
var div = document.getElementById('foo');
var num = parseInt(div.getAttribute('data-num'));

//increment values using click
$("#changeData").on('click',function(){

    //pass current data-num as parameter
    increment(num);

});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.