JQuery ব্যবহার করে কোনও উপাদানের সমস্ত বৈশিষ্ট্য পান


127

আমি একটি উপাদানটির মধ্য দিয়ে যাবার চেষ্টা করছি এবং সেই উপাদানটির সমস্ত বৈশিষ্ট্যগুলি আউটপুট আনতে চেষ্টা করব, উদাহরণস্বরূপ কোনও ট্যাগে 3 বা ততোধিক গুণাবলী থাকতে পারে, যা আমার অজানা এবং আমার এই বৈশিষ্ট্যের নাম এবং মানগুলি পাওয়া দরকার। আমি এর লাইনে কিছু ভাবছিলাম:

$(this).attr().each(function(index, element) {
    var name = $(this).name;
    var value = $(this).value;
    //Do something with name and value...
});

কেউ কি আমাকে বলতে পারেন যে এটি সম্ভব কিনা এবং যদি তাই হয় তবে সঠিক বাক্য গঠনটি কী হবে?

উত্তর:


246

attributesসম্পত্তি তাদের সবাইকে রয়েছে:

$(this).each(function() {
  $.each(this.attributes, function() {
    // this.attributes is not a plain object, but an array
    // of attribute nodes, which contain both the name and value
    if(this.specified) {
      console.log(this.name, this.value);
    }
  });
});

আপনি যা করতে পারেন তা প্রসারিত হচ্ছে .attrযাতে আপনি এটিকে .attr()সমস্ত বৈশিষ্ট্যের একটি সরল অবজেক্ট পেতে পছন্দ করতে পারেন:

(function(old) {
  $.fn.attr = function() {
    if(arguments.length === 0) {
      if(this.length === 0) {
        return null;
      }

      var obj = {};
      $.each(this[0].attributes, function() {
        if(this.specified) {
          obj[this.name] = this.value;
        }
      });
      return obj;
    }

    return old.apply(this, arguments);
  };
})($.fn.attr);

ব্যবহার:

var $div = $("<div data-a='1' id='b'>");
$div.attr();  // { "data-a": "1", "id": "b" }

1
কোনও মিলযুক্ত উপাদান নেই যখন আপনি এটি ঠিক করতে চাইতে পারেন উদাহরণস্বরূপ$().attr()
আলেকজান্ডার

11
এই attributesসংগ্রহে পুরানো IE তে সমস্ত সম্ভাব্য বৈশিষ্ট্য রয়েছে, কেবলমাত্র এইচটিএমএল-তে নির্দিষ্ট করা হয়েছে। আপনি প্রতিটি অ্যাট্রিবিউটর specifiedসম্পত্তি ব্যবহার করে অ্যাট্রিবিউট তালিকাটি ফিল্টার করে এটি ঘিরে কাজ করতে পারেন ।
টিম ডাউন

7
এটি jQuery .attr()পদ্ধতির জন্য খুব ভাল এবং প্রত্যাশিত কার্যকারিতা । এটি আশ্চর্যজনক jQuery এটি অন্তর্ভুক্ত করে না।
ivkremer

কিছুটা জানতে আগ্রহী যে কেন আমরা এটিকে অ্যারে হিসাবে অ্যাক্সেস করছি this[0].attributes?
বিশাল

attributesযদিও এটি অ্যারে নয় ... ক্রোমে অন্তত এটি একটি NamedNodeMap, যা একটি অবজেক্ট।
স্যামুয়েল এডউইন ওয়ার্ড 21

26

আমার নিজের রেফারেন্সের জন্য এবং আপনার নিজের জন্য এখানে করা যেতে পারে এমন অনেকগুলি উপায়ের একটি ওভারভিউ এখানে দেওয়া হয়েছে: ফাংশনগুলি বৈশিষ্ট্যের নাম এবং তাদের মানগুলির একটি হ্যাশ ফিরিয়ে দেয়।

ভ্যানিলা জেএস :

function getAttributes ( node ) {
    var i,
        attributeNodes = node.attributes,
        length = attributeNodes.length,
        attrs = {};

    for ( i = 0; i < length; i++ ) attrs[attributeNodes[i].name] = attributeNodes[i].value;
    return attrs;
}

অ্যারে.রেডুস সহ ভ্যানিলা জেএস

ES 5.1 (2011) সমর্থনকারী ব্রাউজারগুলির জন্য কাজ করে। IE9 + প্রয়োজন, IE8 এ কাজ করে না।

function getAttributes ( node ) {
    var attributeNodeArray = Array.prototype.slice.call( node.attributes );

    return attributeNodeArray.reduce( function ( attrs, attribute ) {
        attrs[attribute.name] = attribute.value;
        return attrs;
    }, {} );
}

jQuery এর

এই ফাংশনটি একটি ডওম উপাদান নয়, একটি jQuery অবজেক্ট আশা করে।

function getAttributes ( $node ) {
    var attrs = {};
    $.each( $node[0].attributes, function ( index, attribute ) {
        attrs[attribute.name] = attribute.value;
    } );

    return attrs;
}

আন্ডারস্কোর

লোডাশের জন্যও কাজ করে।

function getAttributes ( node ) {
    return _.reduce( node.attributes, function ( attrs, attribute ) {
        attrs[attribute.name] = attribute.value;
        return attrs;
    }, {} );
}

lodash

অ্যান্ডস্কোর সংস্করণের চেয়ে আরও সংক্ষিপ্ত, তবে কেবল লড্যাশের জন্য কাজ করে, অ্যান্ডস্কোরের জন্য নয়। আইই 9 + প্রয়োজন, আইই 8-তে বগি। @AlJey যশ যে এক জন্য

function getAttributes ( node ) {
    return _.transform( node.attributes, function ( attrs, attribute ) {
        attrs[attribute.name] = attribute.value;
    }, {} );
}

পরীক্ষার পৃষ্ঠা

জেএস বিনে, এই সমস্ত ফাংশনকে কভার করে একটি লাইভ পরীক্ষার পৃষ্ঠা রয়েছে। পরীক্ষায় বুলিয়ান বৈশিষ্ট্য ( hidden) এবং গণনাযুক্ত বৈশিষ্ট্য ( contenteditable="") অন্তর্ভুক্ত।


3

একটি ডিবাগিং স্ক্রিপ্ট (হ্যাশচেঞ্জ দ্বারা উপরের উত্তরের উপর ভিত্তি করে jquery সমাধান)

function getAttributes ( $node ) {
      $.each( $node[0].attributes, function ( index, attribute ) {
      console.log(attribute.name+':'+attribute.value);
   } );
}

getAttributes($(this));  // find out what attributes are available


0

জাভাস্ক্রিপ্ট ফাংশন ব্যবহার করে নেমডআররে ফর্ম্যাটটিতে কোনও উপাদানগুলির সমস্ত বৈশিষ্ট্য পাওয়া সহজ।

$("#myTestDiv").click(function(){
  var attrs = document.getElementById("myTestDiv").attributes;
  $.each(attrs,function(i,elem){
    $("#attrs").html(    $("#attrs").html()+"<br><b>"+elem.name+"</b>:<i>"+elem.value+"</i>");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="myTestDiv" ekind="div" etype="text" name="stack">
click This
</div>
<div id="attrs">Attributes are <div>


0

অ্যান্ডস্কোর.জেএস দ্বারা সহজ সমাধান

উদাহরণস্বরূপ: সমস্ত লিঙ্কের পাঠ্য পান যাঁদের পিতামাতার ক্লাস রয়েছে someClass

_.pluck($('.someClass').find('a'), 'text');

বেহালার কাজ


0

আমার পরামর্শ:

$.fn.attrs = function (fnc) {
    var obj = {};
    $.each(this[0].attributes, function() {
        if(this.name == 'value') return; // Avoid someone (optional)
        if(this.specified) obj[this.name] = this.value;
    });
    return obj;
}

var a = $ (el) .attrs ();

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