কীভাবে জাভাস্ক্রিপ্ট বা jQuery এ এইচটিএমএলকে সাধারণীকরণ করবেন?


84

ট্যাগগুলিতে একাধিক বৈশিষ্ট্য থাকতে পারে। কোডটিতে বৈশিষ্ট্যগুলি ক্রম অনুসারে প্রদর্শিত হবে তা বিবেচনাধীন নয়। উদাহরণ স্বরূপ:

<a href="#" title="#">
<a title="#" href="#">

আমি কীভাবে জাভাস্ক্রিপ্টে এইচটিএমএলকে "স্বাভাবিক" করতে পারি, তাই বৈশিষ্ট্যের ক্রমটি সর্বদা একই থাকে? যতক্ষণ না সবসময় একই থাকে ততক্ষণ কোন আদেশটি চয়ন করা হয় তা আমি বিবেচনা করি না।

আপডেট : আমার মূল লক্ষ্যটি ছিল সামান্য পার্থক্যের সাথে 2 টি HTML পৃষ্ঠাকে আলাদা করা (জাভাস্ক্রিপ্টে) করা সহজ করা। ব্যবহারকারীরা কোড সম্পাদনা করতে বিভিন্ন সফ্টওয়্যার ব্যবহার করতে পারার কারণে বৈশিষ্ট্যের ক্রম পরিবর্তন হতে পারে। এটি পার্থক্যটিকে খুব ভার্জোজ করে তোলে।

উত্তর : ঠিক আছে, সমস্ত উত্তরের জন্য প্রথম ধন্যবাদ। এবং হ্যাঁ, এটি সম্ভব। এটি আমি কীভাবে পরিচালনা করতে পেরেছি তা এখানে। এটি ধারণার একটি প্রমাণ, এটি অবশ্যই অনুকূলিত করা যেতে পারে:

function sort_attributes(a, b) {
  if( a.name == b.name) {
    return 0;
  }

  return (a.name < b.name) ? -1 : 1;
}

$("#original").find('*').each(function() {
  if (this.attributes.length > 1) {
    var attributes = this.attributes;
    var list = [];

    for(var i =0; i < attributes.length; i++) {
      list.push(attributes[i]);
    }

    list.sort(sort_attributes);

    for(var i = 0; i < list.length; i++) {
      this.removeAttribute(list[i].name, list[i].value);
    }

    for(var i = 0; i < list.length; i++) {
      this.setAttribute(list[i].name, list[i].value);
    }
  }
});

ডিফারফের দ্বিতীয় উপাদানটির জন্য একই জিনিস $('#different')। এখন $('#original').html()এবং $('#different').html()একই ক্রমে বৈশিষ্ট্যযুক্ত এইচটিএমএল কোডটি দেখান।


59
এর দরকার কী?
রাহুল

40
@ রাহুল: আসলে এটির জন্য একটি দুর্দান্ত আকর্ষণীয় প্রয়োজন রয়েছে: এটি আপনার পৃষ্ঠাগুলির জিপিপ সংকোচনের ব্যাপক উন্নতি করতে পারে।
haylem

11
আহ, জাভাস্ক্রিপ্টে ... সংক্ষেপণের জন্য অনেক কিছু। প্রয়োজন তখন কী হয় ধারণা নেই।
haylem

13
@ জুলিয়েন: আপনার জাভাস্ক্রিপ্ট কোড চলার সময় পৃষ্ঠাটি ইতিমধ্যে ক্লায়েন্টকে প্রেরণ করা হয়েছে। আমি দেখতে পাচ্ছি না এটি তখন সংকোচনে কীভাবে সহায়তা করতে পারে।
ক্যাসাব্ল্যাঙ্কা

22
ওপি যা বলবে তা করার চেষ্টা করার জন্য এখানে একটি বৈধ ব্যবহার রয়েছে। উইকি চালাতে একটি WYSIWYG সম্পাদক ব্যবহার করা। আমি যে প্রকল্পে কাজ করছি ঠিক তা করে, এবং আপনি উইকি সম্পাদনা করার সময় সম্পাদক যখনই অযৌক্তিক পার্থক্যের ফলস্বরূপ বৈশিষ্ট্যের ক্রমটিকে বিপরীত করে দেয়। আমি ভিন্ন বর্ণগুলি এড়ানোর জন্য সংরক্ষণের আগে ব্যাকএন্ডে জমা দেওয়া এইচটিএমএলগুলিতে বর্ণমালা অনুসারে বৈশিষ্ট্যগুলি বাছাই করে শেষ করছি; জমা দেওয়ার আগে জাভাস্ক্রিপ্টে ঠিক সেভাবে সাজানো যেতে পারত।
ফ্র্যাঙ্ক ফার্মার

উত্তর:


68

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

আপনি কী অর্জন করতে চাইছেন তা আমি কেবল অনুমান করতে পারি। আপনি যদি জাভাস্ক্রিপ্ট / পৃষ্ঠার কার্যকারিতা উন্নত করার জন্য এটি করার চেষ্টা করছেন, বেশিরভাগ এইচটিএমএল ডকুমেন্ট রেন্ডারারগণ ইতিমধ্যে অ্যাট্রিবিউট অ্যাক্সেসকে অনুকূল করে তোলার জন্য প্রচুর প্রচেষ্টা চালিয়েছেন, তাই সেখানে লাভ হবে না।

যদি আপনি পৃষ্ঠাগুলি তারের উপর দিয়ে প্রেরণ করা হওয়ায় আরও কার্যকর করার জন্য গিজিপ সংক্ষেপণের জন্য অ্যাট্রিবিউটগুলি অর্ডার করার চেষ্টা করছেন তবে বুঝতে পারেন যে জাভাস্ক্রিপ্ট সময়ের পরে এটি চলে। পরিবর্তে, আপনি তার পরিবর্তে সার্ভার-সাইড চালিত জিনিসগুলি দেখতে চাইতে পারেন, যদিও এটি সম্ভবত এটির চেয়ে বেশি সমস্যা।


8
জাভাস্ক্রিপ্ট সার্ভার-সাইড চালাতে পারে।
ম্যাট ক্যান্টর

বৈশিষ্ট্যগুলি ডকুমেন্ট গাছের অংশ হিসাবে বিবেচনা করা হয় না (যা প্রাকৃতিকভাবে ক্রম ব্যবহার করে)। ATTR নোড ইন্টারফেস উত্তরাধিকারী তাই সময় করে DOM কোর 2 নির্দিষ্ট করে এই ক্ষেত্র বৈশিষ্ট্যের জন্য নাল হতে w3.org/TR/DOM-Level-2-Core/core.html#ID-637646024
Svend

35

এইচটিএমএল নিন এবং একটি ডিওএম কাঠামোয় বিশ্লেষণ করুন। তারপরে DOM কাঠামো নিন এবং এটি আবার HTML এ লিখুন। লেখার সময়, কোনও স্থিতিশীল বাছাই করে বৈশিষ্ট্যগুলি সাজান। আপনার এইচটিএমএল এখন গুণাবলী সম্পর্কিত ক্ষেত্রে স্বাভাবিক করা হবে।

জিনিসগুলি স্বাভাবিক করার এটি একটি সাধারণ উপায়। (অ-নর্মালাইজড ডেটা পার্স করুন, তারপরে এটিকে আবার সাধারণ আকারে লিখুন)।

আপনি কেন এইচটিএমএলকে সাধারণীকরণ করতে চান তা আমি নিশ্চিত নই, তবে সেখানে এটি আপনার রয়েছে। ডেটা হ'ল ডেটা। ;-)


4
আপনার কি কোনও কোড উদাহরণ রয়েছে? আমি অনুরূপ কিছু করার চেষ্টা করেছি, এটি কার্যকর হয়নি।
জুলিয়েন

12

এটি ধারণার একটি প্রমাণ, এটি অবশ্যই অনুকূলিত করা যেতে পারে:

function sort_attributes(a, b) {
  if( a.name == b.name) {
    return 0;
  }

  return (a.name < b.name) ? -1 : 1;
 }

$("#original").find('*').each(function() {
  if (this.attributes.length > 1) {
    var attributes = this.attributes;
    var list = [];

    for(var i =0; i < attributes.length; i++) {
      list.push(attributes[i]);
    }

     list.sort(sort_attributes);

    for(var i = 0; i < list.length; i++) {
      this.removeAttribute(list[i].name, list[i].value);
    }

     for(var i = 0; i < list.length; i++) {
       this.setAttribute(list[i].name, list[i].value);
    }
  }
 });

ডিফারফের দ্বিতীয় উপাদানটির জন্য একই জিনিস $ ('# আলাদা')। এখন $ ('# আসল') h এইচটিএমএল () এবং $ ('# ভিন্ন') h এইচটিএমএল () একই ক্রমে বৈশিষ্ট্যযুক্ত এইচটিএমএল কোড দেখায়।


আপনি যদি আপনার এইচটিএমএল সামগ্রীগুলি এক্সএমএলে উত্পন্ন করেন এবং xslt ব্যবহার করে রেন্ডার করেন তবে আমি আরও ভাল মনে করি। আপনি অবশ্যই ভাল আউটপুট পাবেন।
নসরাল

8

আপনি ফায়ারবগে খোলা এইচটিএমএল ট্যাব চেষ্টা করতে পারেন, বৈশিষ্ট্যগুলি সর্বদা একই ক্রমে থাকে


4
এটি নিজের পক্ষে সত্যই সহায়ক নয়। এটি কারণ এটি ডিওএম থেকে এইচটিএমএলটি পুনরায় তৈরি করছে, এবং তবে এটির একটি নির্দিষ্ট বৈশিষ্ট্য পুনরাবৃত্তি আদেশ রয়েছে (বা ফায়ারব্যাগ সেগুলি ম্যানুয়ালি সাজান)। জুলিয়েন এটির সুবিধা নিতে পারে এবং এইচটিএমএল লেখার জন্য একই পদ্ধতিটি ব্যবহার করতে পারে।
ম্যাট ক্যান্টর

5

আসলে, আমি কয়েকটি ভাল কারণ সম্পর্কে ভাবতে পারি। একটি হ'ল পরিচয় মেলানোর জন্য এবং 'ডিফ' টাইপ সরঞ্জামগুলির সাথে ব্যবহারের জন্য তুলনা করা যেখানে এটি বেশ বিরক্তিকর যে শব্দার্থগতভাবে সমতুল্য রেখাগুলিকে "আলাদা" হিসাবে চিহ্নিত করা যেতে পারে।

আসল প্রশ্নটি "জাভাস্ক্রিপ্টে কেন?"

এই প্রশ্নের "গন্ধ" এর "আমার একটি সমস্যা আছে এবং আমি মনে করি আমার একটি উত্তর আছে ... তবে আমার উত্তরটি নিয়েও আমার সমস্যা আছে।"

ওপি যদি ব্যাখ্যা করে যে তারা কেন এটি করতে চায় তবে তাদের ভাল উত্তর পাওয়ার সম্ভাবনা নাটকীয়ভাবে বেড়ে যায়।


2

প্রশ্ন "এটির জন্য কী দরকার?" উত্তর: এটি কোডটিকে আরও পঠনযোগ্য এবং বোঝার সহজ করে তোলে।

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


আপনি দীর্ঘকাল ধরে প্রশ্নটি সম্পর্কে ভাবেননি এমন পদ্ধতিগুলি; এমনকি প্রশ্নের কার্যক্ষম সমাধান এমনকি আপনি এখানে যা বলছেন সেটিকেও সম্বোধন করবে না, যদিও এটি সত্য।
ইস্যু মেরি tseng

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

0

এটি কেবল তখনই গুরুত্বপূর্ণ যখন কোনও ব্যক্তি উত্সটি পড়ছেন, সুতরাং আমার জন্য এটি প্রথমে শব্দার্থবিজ্ঞানযুক্ত বৈশিষ্ট্যগুলি এবং কম শব্দার্থিক গুণাবলী পরবর্তী ...

এর ব্যতিক্রম অবশ্যই রয়েছে, যদি আপনার কাছে টানা <li> উদাহরণস্বরূপ, সকলের একটিতে এবং অন্যকে কেবল একটির বৈশিষ্ট্যযুক্ত কিছু থাকে তবে আপনি নিশ্চিত করতে পারেন যে ভাগ করাগুলি সমস্ত শুরুতে রয়েছে এবং তারপরে স্বতন্ত্র ব্যক্তিদের দ্বারা অনুসরণ করা হবে, উদাঃ ।

<li a = "x"> এ </ li>
<li a = "y" b = "t"> বি </ li>
<li a = "z"> সি </ li>

(এমনকি "বি" অ্যাট্রিবিউট "এ" এর চেয়ে বেশি শব্দার্থগতভাবে কার্যকর হলেও)

আপনি ধারণা পেতে।


0

এটি আসলে সম্ভব, আমি মনে করি, যদি এইচটিএমএল বিষয়বস্তুগুলি এক্সএমএল হিসাবে পাস করা হয় এবং এক্সস্ল্টের মাধ্যমে রেন্ডার করা হয় ... সুতরাং এক্সএমএলে আপনার মূল বিষয়বস্তু আপনি যেভাবে চান সেটি হতে পারে।

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