এমন কোনও উপায় আছে যা আমি কোনও ডেটা অ্যাট্রিবিউট উপস্থিত কিনা তা পরীক্ষা করে দেখতে পারি?


190

কিছু উপায় আছে যা আমি নিম্নলিখিত চালাতে পারি:

var data = $("#dataTable").data('timer');
var diffs = [];

for(var i = 0; i + 1 < data.length; i++) {
    diffs[i] = data[i + 1] - data[i];
}

alert(diffs.join(', '));

শুধু যদি একটি বৈশিষ্ট্য #dataTable একজন আইডি সহ উপাদান বলা হয় ডেটা-টাইমার?


সচেতন হওয়ার জন্য একটি সতর্কতা হ'ল কখনও কখনও কোনও data-অ্যাট্রিবিউটে কোনও কিছু সঞ্চিত থাকে না তবে সেখানে jQuery এবং বিপরীতে ডেটা সঞ্চিত থাকে।
অ্যালেক্স ডাব্লু

উত্তর:


295
if ($("#dataTable").data('timer')) {
  ...
}

দ্রষ্টব্য এটি কেবল trueতখনই প্রদান করে যদি ডেটা অ্যাট্রিবিউট খালি স্ট্রিং না হয় বা "ভুয়া" মান যেমন 0বা false

আপনি যদি ডেটা অ্যাট্রিবিউটটির অস্তিত্ব পরীক্ষা করতে চান, এমনকি খালি হলেও, এটি করুন:

if (typeof $("#dataTable").data('timer') !== 'undefined') {
  ...
}

35
আপনার জন্য আরেকটি বিকল্প: if ($("#dataTable[data-timer]").length) { ... }
ভিজিওন

101
সতর্ক হোন! ডেটা-টাইমারের একটি মান থাকলে এটি কেবল সত্যের কাছে মূল্যায়ন করে। এটি উপস্থিত থাকলে, তবে খালি এটি মিথ্যা ফিরে আসবে।
কং

15
কং সঠিক, যদি কোনও কোড খালি থাকে তবে আপনার কোড কাজ করে না। পরিবর্তে এই ব্যবহার করুন: যদি (typeof $ ( "# dataTable") ATTR ( 'ডেটা-টাইমার') == "undefined"।!) {...}
PierrickM

22
তবুও অন্য সংস্করণ যে আপনি আপনার শর্তসাপেক্ষ জন্য একটি প্রকৃত বুলিয়ান দেয়: if ( $("#dataTable").is("[data-timer]") ) { ... }। এটি ইতিমধ্যে আরও কার্যকর যদি আপনার কাছে ইতিমধ্যে অন্য jQuery অবজেক্টে টেবিলের রেফারেন্স থাকে।
নয়েও

10
মানটি বিদ্যমান এবং এটি 0 এর সমান হলে এটি মিথ্যা ফেরত আসবে This
গেরম্যান

112
if (typeof $("#dataTable").data('timer') !== 'undefined')
{
    // your code here
}

@VisioN একটি ব্যর্থ নিরাপদ আপনার এবং সমন্বয় PierrickM উপর এর মন্তব্যে এই উত্তর: if (typeof $('#dataTable').data('timer') !== 'undefined') ...
WynandB

3
@Wynand। আপনার এবং ভিজিওএন এর মন্তব্যে প্রতিফলিত করার জন্য আপডেট হয়েছে।
পল ফ্লেমিং

1
@flem তুমিও যোগ করতে হবে typeofচেক
ব্রেন্ডন Bullen

1
@ ফ্লেম, @ ভিজিওএন, আপনার পদ্ধতির ক্ষেত্রে ব্যর্থতা নেই যেখানে কোনও ডেটা অ্যাট্রিবিউট নেই, তবে ডেটা () পদ্ধতিটি দিয়ে যেমন ডেটা সেট করা আছে, যেমন $('#dataTable').data('timer', Date.now())। দেখে মনে হচ্ছে ওপি প্রকৃত ডেটা অ্যাট্রিবিউট আছে কিনা তা পরীক্ষা করতে চায় wants @ নিরুর সমাধান (বা আপনি যে সমাধানটির জন্য একটি মন্তব্যে প্রস্তাব দিচ্ছেন) এই ক্ষেত্রে ভাল।
নয়েও

1
@ ভিসিওন আমার জন্য undefinedএটি একটি ধারাবাহিক পদ্ধতিতে চেক করা সম্পর্কে । আমরা কেন জানি typeofজন্য চেক করতে ব্যবহার করা হয় undefinedকিছু ক্ষেত্রে, কিন্তু আমি এটা দেখতে এটি পরীক্ষা করা হচ্ছে বিভ্রান্তিকর খুঁজে পেতে চাই সঙ্গে typeof এক জায়গায় এবং ছাড়া অন্য। এছাড়াও, এটি অনেক বেশি জটিল কোড typeofযুক্ত করার মতো নয় । এটি আরও সুস্পষ্ট হতে পারে, সম্ভবত বেশিরভাগ ক্ষেত্রে অপ্রয়োজনীয় তবে খুব কমই জটিল। আমি যদিও আপনার বক্তব্যটি দেখতে পাচ্ছি, তবে আমি বলব যে এটি ব্যবহার না করা হবে ওভারসিম্প্লিফিকেশন। ;]
WynandB

38

উপরের উত্তরগুলি থেকে আলাদা উত্তর দেওয়ার স্বার্থে; আপনি এটির Object.hasOwnProperty(...)মতো এটি পরীক্ষা করতে পারেন:

 if( $("#dataTable").data().hasOwnProperty("timer") ){
     // the data-time property exists, now do you business! .....
 }

বিকল্পভাবে, যদি আপনার একাধিক ডেটা উপাদান থাকে তবে আপনি পুনরাবৃত্তি করতে চান আপনি .data()অবজেক্টটির বৈচিত্র্যকরণ করতে এবং এটির উপরে এটি পুনরাবৃত্তি করতে পারেন:

 var objData = $("#dataTable").data();
 for ( data in objData ){
      if( data == 'timer' ){
            //...do the do
      }
 }

এই সমাধানটি এখানে অন্য যে কোনও একটির চেয়ে ভাল বলে মনে হচ্ছে না, তবে কমপক্ষে এটি অন্য পদ্ধতি ...


9
এটি আকর্ষণীয়, তবে এটি লক্ষ্য করা উচিত যে আপনার যদি বৈশিষ্ট্যটি থাকে data-foo-barতবে আপনার চেকটি হওয়া দরকার .data().hasOwnProperty("fooBar"), না.data().hasOwnProperty("foo-bar")
ডিজিএমস্টুয়ার্ট

জাভাস্ক্রিপ্ট বৈধকারীর সাথে এই উদাহরণে আকর্ষণীয়। টাইপটি অপরিবর্তিত ফিরে এসেছে, কিন্তু এটি কার্যকর!
রিচার্ড হওশাম

12

অথবা কিছু ভ্যানিলা জেএস এর সাথে একত্রিত করুন

if ($("#dataTable").get(0).hasAttribute("data-timer")) {
  ...
}

আমার এটা ভাল লেগেছে. তবে আপনি এর data()পরিবর্তে jQuery ব্যবহার করে ডেটা তৈরি করেন attr(), এটি বৈশিষ্ট্যটি পাবেন না :(
স্যাম

10

আপনি jQuery এর hasData পদ্ধতি ব্যবহার করতে পারেন।

http://api.jquery.com/jQuery.hasData/

JQuery.hasData (উপাদান) এর প্রাথমিক সুবিধাটি হ'ল এটি বর্তমানে উপস্থিত না থাকলে উপাদানটির সাথে ডেটা অবজেক্ট তৈরি এবং সংযুক্ত করে না। বিপরীতে, jQuery.data (উপাদান) সবসময় কলারের কাছে ডেটা অবজেক্ট ফিরিয়ে দেয়, ডেটা অবজেক্টের অস্তিত্ব না থাকলে এমন একটি তৈরি করে।

এটি কেবলমাত্র আপনার উপাদানটিতে থাকা কোনও ডেটা অবজেক্ট (বা ইভেন্টস) এর অস্তিত্বের জন্য যাচাই করবে, এটি নির্দিষ্ট করে কোনও "টাইমার" অবজেক্ট রয়েছে কিনা তা নিশ্চিত করতে সক্ষম হবে না।


10

আপনি যদি খালি মান এবং হারিয়ে যাওয়া মানগুলির মধ্যে পার্থক্য করতে চান তবে আপনি এই জাতীয় চেক করতে jQuery ব্যবহার করতে পারেন।

<div id="element" data-foo="bar" data-empty=""></div>

<script>
"foo" in $('#element').data(); // true
"empty" in $('#element').data(); // true
"other" in $('#element').data(); // false
</script>

সুতরাং আসল প্রশ্ন থেকে আপনি এটি করতে চাইবেন।

if("timer" in $("#dataTable").data()) {
  // code
}

7

আপনি এটির জন্য একটি উপাদানকে জিজ্ঞাসা করার জন্য একটি অত্যন্ত সাধারণ jQuery- প্লাগইন তৈরি করতে পারেন:

$.fn.hasData = function(key) {
  return (typeof $(this).data(key) != 'undefined');
};

তারপরে আপনি সহজভাবে ব্যবহার করতে পারেন $("#dataTable").hasData('timer')

Gotchas:

  • falseমানটি উপস্থিত না হলে ( ফিরে) কেবল ফিরে আসবে undefined; এটি সেট করা থাকলে false/ nullএটি hasData()এখনও ফিরে আসবেtrue
  • এটি অন্তর্নির্মিত থেকে আলাদা $.hasData()যা কেবলমাত্র উপাদানটির কোনও ডেটা সেট করা আছে কিনা তা পরীক্ষা করে।

3

আমি গতিশীলভাবে সেট ডেটা উপাদানগুলির সাথে এটি আরও ভাল কাজ করে দেখেছি:

if ($("#myelement").data('myfield')) {
  ...
}

3

এখানে সমস্ত উত্তর jQuery লাইব্রেরি ব্যবহার করে।

তবে ভ্যানিলা জাভাস্ক্রিপ্টটি খুব সোজা।

আপনি একটি স্ক্রিপ্ট একটি সঙ্গে উপাদান শুধুমাত্র যদি চালাতে চান তাহলে idএর #dataTable আরো একটি আছে data-timerঅ্যাট্রিবিউট, তারপর ধাপ হিসেবে অনুসরণ করে আছেন:

// Locate the element

const myElement = document.getElementById('dataTable');

// Run conditional code

if (myElement.dataset.hasOwnProperty('timer')) {

  [... CODE HERE...]

}

2

এটি আমার মতে সবচেয়ে সহজ সমাধান হ'ল সমস্ত উপাদান নির্বাচন করা যা নির্দিষ্ট ডেটা অ্যাট্রিবিউটযুক্ত রয়েছে:

var data = $("#dataTable[data-timer]");
var diffs = [];

for(var i = 0; i + 1 < data.length; i++) {
    diffs[i] = data[i + 1] - data[i];
}

alert(diffs.join(', '));

এটি কীভাবে কাজ করে তার স্ক্রিনশট এখানে।

jquery নির্বাচক কনসোল লগ


1

ভুল উত্তর - শেষে সম্পাদনা দেখুন

আমাকে অ্যালেক্সের উত্তরটি তৈরি করতে দিন।

ডেটা অবজেক্টটি উপস্থিত না থাকলে এটি সৃষ্টি রোধ করতে আমি আরও ভাল করতাম:

$.fn.hasData = function(key) {
    var $this = $(this);
    return $.hasData($this) && typeof $this.data(key) !== 'undefined';
};

তারপরে, যেখানে $thisকোনও ডেটা অবজেক্ট তৈরি হয়নি, $.hasDataফিরে আসে falseএবং এটি কার্যকর হয় না$this.data(key)

সম্পাদনা: ফাংশন $.hasData(element)কেবল তখনই কাজ করে যদি ডেটা ব্যবহার করে সেট করা থাকে $.data(element, key, value), না element.data(key, value)। সে কারণে আমার উত্তরটি সঠিক নয়।


1

আমার সাথে কাজ করার জন্য একটি সাধারণ বুলিয়ান প্রয়োজন। এটি উপস্থিত নেই এবং মিথ্যা নয় এটি অপরিজ্ঞাত বলে আমি !!বুলিয়ান রূপান্তর করতে ব্যবহার করি :

var hasTimer = !!$("#dataTable").data('timer');
if( hasTimer ){ /* ....... */ }

একটি বিকল্প সমাধান ফিল্টার ব্যবহার করা হবে:

if( $("#dataTable").filter('[data-timer]').length!==0) { /* ....... */ }

0
var data = $("#dataTable").data('timer');
var diffs = [];

if( data.length > 0 ) {
for(var i = 0; i + 1 < data.length; i++) {
    diffs[i] = data[i + 1] - data[i];
}

alert(diffs.join(', '));
}

যদি .data('timer')অপরিজ্ঞাপিত হয় তবে আপনি একটি টাইপরর পাবেন: চেক করার সময় ((...)। ডেটা (...) অপরিজ্ঞাত হয় data.length। এটি সম্ভবত ওপি-র প্রশ্নের ভিত্তি, অর্থাত্ যে কেউ নিরাপদে data.lengthঅন্য কোথাও চেক করতে পারে তা নিশ্চিত করা । তদতিরিক্ত, আপনি প্রয়োজনীয়ভাবে dataস্ট্রিং, একটি অ্যারে বা কোনও বস্তু কিনা তা নিশ্চিত করে বলতে সক্ষম হবেন না যার মধ্যে পরবর্তীটি lengthসংজ্ঞায়িত সম্পত্তি হিসাবে থাকতে পারে বা নাও থাকতে পারে ।
WynandB

হ্যাঁ আমার উত্তরটির সংশোধন দরকার। 2012 সালে লিখিত .. তবে উত্তরটি ইতিমধ্যে দেওয়া হওয়ায় এটি পুনর্লিখন অকার্যকর হবে।
Luceos

0

আপনি সিএসএস বৈশিষ্ট্য নির্বাচন দিয়ে পরীক্ষা করতে পারেন

if ($('#dataTable').is('[data-timer]')) {
   // data-timer attribute exists
}

3
ডেটা মান সর্বদা ডিওএম বৈশিষ্ট্য হিসাবে সংরক্ষণ করা হয় না। আপনি যখন Qu .ডাটা ব্যবহার করে jQuery এর সাথে ডেটা মানগুলি পরিবর্তন করেন, এটি এটিকে একটি উপাদান হিসাবে সেট করে।
কিওয়ার্টি

0

এবং কি সম্পর্কে:

if ($('#dataTable[data-timer]').length > 0) {
    // logic here
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.