jQuery - কোনও উপাদানটি যখন ডিওএম থেকে সরানো হয় তখন ট্রিগার ইভেন্ট


211

পৃষ্ঠা থেকে যখন কোনও উপাদান অপসারণ করা হয় তখন কীভাবে কিছু জেএস কোড কার্যকর করতে হয় তা নির্ধারণ করার চেষ্টা করছি:

jQuery('#some-element').remove(); // remove some element from the page
/* need to figure out how to independently detect the above happened */

এর জন্য কি কোনও ইভেন্ট তৈরি করা হয়েছে, এরকম কিছু:

jQuery('#some-element').onremoval( function() {
    // do post-mortem stuff here
});

ধন্যবাদ।


1
কৌতূহলের বাইরে, যে উপাদানটি সরিয়ে ফেলা হয়েছে তার সাথে কী করতে চাইবে?
নেত্রিয়াম

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

উত্তর:


118

সন্ধান করা হয়েছে, এটি ইতিমধ্যে জিকিউয়ের বর্তমান সংস্করণে অন্তর্নির্মিত:

jQuery - v1.9.1

jQuery UI - v1.10.2

$("#myDiv").on("remove", function () {
    alert("Element was removed");
})

গুরুত্বপূর্ণ : এটি জ্যাকোরি ইউআই স্ক্রিপ্টের কার্যকারিতা ( জিকুয়েরি নয়), সুতরাং এটির কাজ করতে আপনাকে উভয় স্ক্রিপ্ট (jquery এবং jquery-ui) লোড করতে হবে। এখানে উদাহরণস্বরূপ: http://jsfiddle.net/72RTz/


11
এটি খুব সহায়ক ছিল। আমি শিখেছি যে এই কার্যকারিতাটি jQuery UI এর "উইজেট" উপাদানগুলির মধ্যে রয়েছে যদি আপনি পুরো UI লাইব্রেরিটি ডাউনলোড করতে না দেখেন।
নিল

5
এই কোথাও নথিভুক্ত করা হয়? আমি সবেমাত্র jQuery UI উইজেট ডকুমেন্টেশন সন্ধান করেছি এবং এর কোন উল্লেখ পাইনি। এটি সরকারীভাবে সমর্থনযোগ্য কিনা / এটি ব্যবহার সম্পর্কে কোনও সতর্কতা রয়েছে কিনা তা দেখতে চাই ...
জোশ

এই এক কাজ করে না - jQuery এর 1.10.2 চেষ্টা অবশ্য নিচে @mtkopone ঠিকভাবে কাজ দ্বারা উত্তর তাই আমি যে প্রশ্নে উত্তর আপডেট করার জন্য ভোট দেবে
মার্সিন

20
এটি একমাত্র আংশিকভাবে কাজ করে। আপনি যদি removeউপাদানটিতে কাজ করেন তবে এটি আগুন ধরিয়ে দেয়, তবে যদি উপাদানটি অন্য কোনওভাবে ধ্বংস হয় তবে ওভাররাইট করে বলুন, এটি কাজ করে না।
কার্ল স্মিথ

আপনি হয়ত সঠিক হতে পারেন, সম্ভবত এই মামলার জন্য অন্য ইভেন্টের নাম রয়েছে। আপনি যদি আপনার মামলার জন্য jsfiddle নমুনা সরবরাহ করতে পারেন তবে দুর্দান্ত হবে।
ফিলিপ মুনিন

195

আপনি এর জন্য jQuery বিশেষ ইভেন্টগুলি ব্যবহার করতে পারেন ।

সমস্ত সরলতায়,

সেটআপ:

(function($){
  $.event.special.destroyed = {
    remove: function(o) {
      if (o.handler) {
        o.handler()
      }
    }
  }
})(jQuery)

ব্যবহার:

$('.thing').bind('destroyed', function() {
  // do stuff
})

পিয়েরি এবং ডিজাইনার গুয়ের মন্তব্যের উত্তর দিতে সংযোজন:

কল করার সময় কলব্যাক ফায়ার না হওয়ার জন্য $('.thing').off('destroyed'), এই অবস্থার পরিবর্তন করুন:if (o.handler && o.type !== 'destroyed') { ... }


15
সত্যিই দুর্দান্ত সমাধান। বেন আলমান আরও তথ্যের জন্য বিশেষ ইভেন্টগুলি সম্পর্কে একটি দুর্দান্ত রচনাআপ রয়েছে
নিউজ

11
+1 এখনও অবধি এই বিশেষ ইভেন্টগুলি পুরোপুরি মিস করতে পেরেছিল, ডার্ন দরকারী! রাষ্ট্র একটা জিনিষ শুধুমাত্র উপরের বাস্তবায়িত পেয়ে তার সেরা হতে পরিবর্তন করতে হবে o.handler()করতে o.handler.apply(this,arguments)অন্যথায় ঘটনা এবং তথ্য বস্তু ঘটনা শ্রোতা মাধ্যমে গৃহীত হয় না।
পেব্ল

6
আপনি jQuery ব্যতীত উপাদানগুলি সরিয়ে ফেললে এটি কার্যকর হয় না।
djjeck

5
এটি কার্যকর হয় না) যখন উপাদানগুলি অপসারণের পরিবর্তে বিচ্ছিন্ন করা হয় বা খ) যখন কিছু পুরানো নন-জিকুরি লাইব্রেরিগুলি আপনার উপাদানগুলি ধ্বংস করতে অভ্যন্তরীণ এইচটিএমএল ব্যবহার করে (ডিজেজেক যা বলেছিল তার অনুরূপ)
এমই

5
আপনি যখন $('.thing').unbind('destroyed')সত্যই বিরক্তিকর হতে পারেন যখন হ্যান্ডলার বলা হয় সে সম্পর্কে সতর্ক হন (যেহেতু আনবাইন্ডের অর্থ আমরা হ্যান্ডলারটি কল করতে চাই না ...)
পিয়েরে

54

আপনি DOMNodeRemoved ইভেন্টে আবদ্ধ করতে পারেন (DOM স্তর 3 ডাব্লুসি 3 অনুষঙ্গের অংশ)।

IE9 এ কাজ করে, ফায়ারফক্স এবং ক্রোমের সর্বশেষ রিলিজ।

উদাহরণ:

$(document).bind("DOMNodeRemoved", function(e)
{
    alert("Removed: " + e.target.nodeName);
});

বাধ্যতামূলকভাবে উপাদানগুলি সন্নিবেশ করানোর সময় আপনি বিজ্ঞপ্তিটি পেতে পারেন DOMNodeInserted


13
দ্রষ্টব্য: "একটি ডকুমেন্টে ডিওএম মিউটেশন শ্রোতাদের যুক্ত করা সেই ডকুমেন্টে আরও ডিওএম সংশোধনকারীদের কর্মক্ষমতাকে গভীরভাবে হ্রাস করে (তাদের 1.5 - 7 গুণ ধীর করে দেয়!)" থেকে: বিকাশকারী.মোজিলা.আর.ইন
ডিওএম / রূপান্তর_আভেন্টস

1
এটি ভালবাসুন, যদিও নোডনাম আমার পক্ষে খুব কমই কার্যকর। আমি শুধু ব্যবহার করি e.target.classNameবা if ($(e.target).hasClass('my-class')) { ...
মিকাহ অ্যালকর্ন

এটি উপাদানটিতে নিজেই কাজ করছে না, কেবল তার শিশুরা।
এক্সডিজি

আশ্চর্য উত্তর! সত্যিই আমাকে সাহায্য!
কির মাজুর

উত্পাদনের ক্ষেত্রে কোডটি ধীর এবং খারাপ ধারণা হতে পারে তবে এটি একমাত্র পদ্ধতির মতো যা সিঙ্ক্রোনসিভভাবে কাজ করে (মিউটেশনঅবার্সারের বিপরীতে) এবং এর জন্য কোনও নোডের জন্য (কেবল জিকুয়ের মাধ্যমে সরানো নোড নয়)। এটি ডিবাগিংয়ের জন্য একটি দুর্দান্ত বিকল্প।
-19

38

উপাদানগুলি সরানোর জন্য কোনও অন্তর্নির্মিত ইভেন্ট নেই, তবে আপনি নকল-প্রসারিত jQuery এর ডিফল্ট অপসারণ পদ্ধতিটি তৈরি করতে পারেন। দ্রষ্টব্য যে রেফারেন্স রাখার জন্য কলব্যাকটি অবশ্যই এটি অপসারণের আগে অবশ্যই কল করা উচিত।

(function() {
    var ev = new $.Event('remove'),
        orig = $.fn.remove;
    $.fn.remove = function() {
        $(this).trigger(ev);
        return orig.apply(this, arguments);
    }
})();

$('#some-element').bind('remove', function() {
    console.log('removed!');
    // do pre-mortem stuff here
    // 'this' is still a reference to the element, before removing it
});

// some other js code here [...]

$('#some-element').remove();

দ্রষ্টব্য: এই উত্তরটির সাথে কিছু সমস্যা অন্যান্য পোস্টারগুলি দ্বারা রূপরেখার করা হয়েছে।

  1. নোড html() replace()বা অন্যান্য jQuery পদ্ধতিগুলির মাধ্যমে সরানো হলে এটি কাজ করবে না
  2. এই ইভেন্ট বুদবুদ
  3. jQuery UI ওভাররাইডগুলি পাশাপাশি সরান

এই সমস্যার সর্বাধিক মার্জিত সমাধান বলে মনে হচ্ছে: https://stackoverflow.com/a/10172676/216941


2
তার জন্য ধন্যবাদ! একটি সামান্য সংযোজন: কারণ অপসারণ-ইভেন্টটি বুদবুদ হয়ে যায়, কোনও শিশুকে সরানো হলে আপনি এটিও পাবেন, সুতরাং হ্যান্ডলারটি আরও ভালভাবে লিখুন:$('#some-element').bind('remove', function(ev) { if (ev.target === this) { console.log('removed!'); } });
মেয়ার্তি

3
এটি আমার জন্য বাক্স থেকে কার্যকর হয়নি - আমাকে অরিজ.প্লাই থেকে ফলাফলটি ফিরিয়ে দিতে হয়েছিল।
fturtle

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

1
নির্ভুলতার বিষয়ে আমার একমাত্র তাত্পর্যটি হল বিবৃতি - 'উপাদানগুলি অপসারণের জন্য ইভেন্টের মধ্যে কোনও বিল্ড নেই' --- সেখানে ব্রাউজারগুলির জন্য একটি বিল্ট ইন রয়েছে যা লেভেল 3 ডিওএম ইভেন্টগুলি প্রয়োগ করে (আমার উত্তরে বর্ণিত)।
আদম

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

32

Hooking .remove()সবচেয়ে ভালো উপায় এই হ্যান্ডেল হিসেবে পাতার থেকে উপাদানগুলি মুছে ফেলার জন্য অনেক উপায় (যেমন ব্যবহার করে হয় না .html(), .replace()ইত্যাদি)।

বিভিন্ন মেমরি ফাঁসের ঝুঁকি প্রতিরোধের জন্য, অভ্যন্তরীণভাবে jQuery ফাংশনটি কল করার চেষ্টা করবে jQuery.cleanData() অপসারণের জন্য ব্যবহৃত পদ্ধতিটি বিবেচনা না করে প্রতিটি অপসারণ উপাদানটির জন্য করবে।

আরও বিশদের জন্য এই উত্তরটি দেখুন: জাভাস্ক্রিপ্ট মেমরি ফাঁস

সুতরাং, সেরা ফলাফলের জন্য, আপনার cleanDataফাংশনটি হুক করা উচিত , যা jquery.event.destroyed প্লাগইনটি ঠিক তাই করে:

http://v3.javascriptmvc.com/jquery/dist/jquery.event.destroyed.js


সম্পর্কে এই অন্তর্দৃষ্টি cleanDataআমার জন্য খুব সহায়ক ছিল! আপনাকে অনেক ধন্যবাদ, জো :)
পেটর ভোস্টরেল

1
উত্তম উত্তর, কিন্তু এখনও এটি কেবল jQuery পদ্ধতির জন্য কাজ করে। আপনি যদি অন্য কোনও প্ল্যাটফর্মের সাথে সংহত করছেন যা আপনার নীচে থেকে "গালিচা টানতে পারে" - অ্যাডামের উত্তরটি সবচেয়ে তাৎপর্যপূর্ণ করে তোলে।
ব্রোন ডেভিস

7

যারা jQuery UI ব্যবহার করেন তাদের জন্য:

jQuery এর UI 'তে, jQuery পদ্ধতি কিছু ওভাররাইড হয়েছে বাস্তবায়ন removeঘটনা না শুধুমাত্র ঘাঁটা পরার যে যখন আপনি স্পষ্টভাবে দেওয়া উপাদান অপসারণ, কিন্তু যদি উপাদান কোনো স্ব-পরিষ্কারের jQuery এর পদ্ধতি দ্বারা DOM থেকে সরানো (যেমন replace, htmlইত্যাদি) । এটি মূলত আপনাকে একই ইভেন্টগুলিতে একটি হুক রাখার অনুমতি দেয় যা জিক্যুয়ারি যখন কোনও ডিওএম এলিমেন্টের সাথে সম্পর্কিত ইভেন্ট এবং ডেটা "পরিষ্কার" করে দেয় তখন গুলি ছড়িয়ে দেওয়া হয়।

জন রেসিগ ইঙ্গিত করেছেন যে তিনি jQuery কোর এর ভবিষ্যতের সংস্করণে এই ইভেন্টটি বাস্তবায়নের ধারণা সম্পর্কে উন্মুক্ত, তবে বর্তমানে এটি কোথায় রয়েছে তা আমি নিশ্চিত নই।


6

কেবল jQuery প্রয়োজন (কোন jQuery UI প্রয়োজন)

( আমি jQuery UI ফ্রেমওয়ার্ক থেকে এই এক্সটেনশনটি বের করেছি )

সঙ্গে কাজ করে: empty()এবং html()এবংremove()

$.cleanData = ( function( orig ) {
    return function( elems ) {
        var events, elem, i;
        for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
            try {

                // Only trigger remove when necessary to save time
                events = $._data( elem, "events" );
                if ( events && events.remove ) {
                    $( elem ).triggerHandler( "remove" );
                }

            // Http://bugs.jquery.com/ticket/8235
            } catch ( e ) {}
        }
        orig( elems );
    };
} )( $.cleanData );

এই সমাধানের সাহায্যে আপনি ইভেন্ট হ্যান্ডলারটিকেও আবদ্ধ করতে পারেন ।

$("YourElemSelector").off("remove");

চেষ্টা করে দেখুন! - উদাহরণ

$.cleanData = (function(orig) {
  return function(elems) {
    var events, elem, i;
    for (i = 0;
      (elem = elems[i]) != null; i++) {
      try {

        // Only trigger remove when necessary to save time
        events = $._data(elem, "events");
        if (events && events.remove) {
          $(elem).triggerHandler("remove");
        }

        // Http://bugs.jquery.com/ticket/8235
      } catch (e) {}
    }
    orig(elems);
  };
})($.cleanData);


$("#DivToBeRemoved").on("remove", function() {
  console.log("div was removed event fired");
});

$("p").on("remove", function() {
  console.log("p was removed event fired");
});

$("span").on("remove", function() {
  console.log("span was removed event fired");
});

// $("span").off("remove");

$("#DivToBeRemoved").on("click", function() {
  console.log("Div was clicked");
});

function RemoveDiv() {
  //       $("#DivToBeRemoved").parent().html("");    
  $("#DivToBeRemoved").remove();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h3>OnRemove event handler attached to elements `div`, `p` and `span`.</h3>
<div class="container">
  <br>
  <button onclick="RemoveDiv();">Click here to remove div below</button>
  <div id="DivToBeRemoved">
    DIV TO BE REMOVED 
    contains 1 p element 
    which in turn contains a span element
    <p>i am p (within div)
      <br><br><span>i am span (within div)</span></p>
  </div>
</div>

অতিরিক্ত ডেমো - জেএসবিন


4

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

var count = 1;
(function ($) {
    $.event.special.destroyed_proxy = {
        remove: function (o) {
            $(this).trigger('destroyed');
        }
    }
})(jQuery)

$('.remove').on('click', function () {
    $(this).parent().remove();
});

$('li').on('destroyed_proxy destroyed', function () {
    console.log('Element removed');
    if (count > 2) {
        $('li').off('destroyed');
        console.log('unbinded');
    }
    count++;
});

এখানে একটি ঝাঁকুনি


এখানে ব্রাউজার সামঞ্জস্যতা সম্পর্কে কি? এটি এখনও কাজ করে?
ভ্লাদিস্লাভ রাস্ট্রুসনি

3

আমি jQuery বিশেষ ইভেন্টগুলি ব্যবহার করে এমটকোফোনের উত্তর পছন্দ করি তবে নোট করুন যে এটি কার্যকর হয় না) যখন উপাদানগুলি অপসারণের পরিবর্তে আলাদা করা হয় বা খ) যখন কিছু পুরানো নন-জিকুরি লাইব্রেরি আপনার উপাদানগুলি ধ্বংস করতে অভ্যন্তরীণ এইচটিএমএল ব্যবহার করে


3
আমি হ্রাস পেয়েছি কারণ প্রশ্নটি স্পষ্টভাবে জিজ্ঞাসা করে .আরমোভ () ব্যবহারের জন্য, বিচ্ছিন্ন নয়। detachউপাদানটি সম্ভবত পুনরায় সংযুক্ত করার পরিকল্পনা করা হওয়ায় বিশেষত ক্লিনআপ ট্রিগার না করার জন্য ব্যবহৃত হয়। খ) এখনও সত্য এবং এখনও কোনও নির্ভরযোগ্য হ্যান্ডলিং নেই, কমপক্ষে যেহেতু DOM রূপান্তর ইভেন্টগুলি ব্যাপকভাবে প্রয়োগ করা হবে।
পিয়ের

4
আমি বাজি ধরছি আপনি "সমালোচক" ব্যাজ পেতে কেবল এটিই করেছেন;)
চারন এমই

1

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

বিকল্পভাবে, আপনি একটি অপসারণ ফাংশন তৈরি করতে পারেন ...

var removeElements = function(selector) {
    var elems = jQuery(selector);

    // Your code to notify the removal of the element here...
    alert(elems.length + " elements removed");

    jQuery(selector).remove();
};

// Sample usage
removeElements("#some-element");
removeElements("p");
removeElements(".myclass");

1
এই ধারণার জন্য +1। যদিও আপনি আরও স্ট্যান্ডার্ড জিকুয়েরি কল পেতে: jQuery (প্লাগইন স্টাইল) প্রসারিত করতে পারতেন যেমন: $ ('। আইটেমোটোআমোভ') custom কাস্টম সরানো () ;. আপনি এটিও তৈরি করতে পারেন যাতে এটি পরামিতি হিসাবে কলব্যাক গ্রহণ করে।
ব্যবহারকারী 113716

1

এইভাবে একটি jQuery লাইভ রিমুভ শ্রোতা তৈরি করতে :

$(document).on('DOMNodeRemoved', function(e)
{
  var $element = $(e.target).find('.element');
  if ($element.length)
  {
    // do anything with $element
  }
});

বা:

$(document).on('DOMNodeRemoved', function(e)
{
  $(e.target).find('.element').each(function()
  {
    // do anything with $(this)
  }
});

1
এটি করা মুক্ত হবে দুর্দান্ত হবে। দুর্ভাগ্যক্রমে এটি নির্ভরযোগ্য নয়, যেহেতু মিউটেশন-ইভেন্টগুলি হ্রাস করা হচ্ছে: বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

1

JQuery থেকে "অপসারণ" ইভেন্টটি যোগ না করে দুর্দান্ত কাজ করে works এটি jQuery প্যাচিংয়ের পরিবর্তে একটি সহজ কৌশল ব্যবহার করা সময়ে আরও নির্ভরযোগ্য হতে পারে।

আপনি যে উপাদানটি ডিওএম থেকে অপসারণ করতে চলেছেন তার মধ্যে কেবল একটি বৈশিষ্ট্য সংশোধন বা যুক্ত করুন। সুতরাং, আপনি যে কোনও আপডেট ফাংশন ট্রিগার করতে পারেন, এটি "do_not_count_it" বৈশিষ্ট্যটি সহ ধ্বংস করার পথে উপাদানগুলিকে কেবল উপেক্ষা করবে।

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

$('td[validity="count_it"]').on("remove", function () {
    $(this).attr("validity","do_not_count_it");
    update_prices();
});

এবং এখানে একটি ফাংশন রয়েছে যা টেবিলের সর্বশেষ মূল্য খুঁজে বের করে, সর্বশেষের অ্যাকাউন্ট না করে, যদি এটি অপসারণ করা হয়। আসলে, যখন "অপসারণ" ইভেন্টটি ট্রিগার করা হয় এবং যখন এই ফাংশনটি ডাকা হয় তখন উপাদানটি এখনও সরানো হয় না।

function update_prices(){
      var mytable=$("#pricestable");
      var lastpricecell = mytable.find('td[validity="count_it"]').last();
}

শেষ পর্যন্ত, আপডেট_প্রাইস () ফাংশনটি দুর্দান্ত কাজ করে এবং এর পরে, ডিওএম উপাদানটি সরানো হয়।


0

@ ডেভিড উত্তরের রেফারেন্সিং:

আপনি যখন অন্য কোনও ফাংশন সহ সু-কাজ করতে চান, যেমন। এইচটিএমএল () আমার ক্ষেত্রে পছন্দ করুন, নতুন ফাংশনে রিটার্ন যুক্ত করতে ভুলবেন না:

(function() {
    var ev = new $.Event('html'),
        orig = $.fn.html;
    $.fn.html = function() {
        $(this).trigger(ev);
        return orig.apply(this, arguments);
    }
})();

0

এই.

$.each(
  $('#some-element'), 
        function(i, item){
            item.addEventListener('DOMNodeRemovedFromDocument',
                function(e){ console.log('I has been removed'); console.log(e);
                })
         })

1
DOMNodeRemovedFromDocament ফায়ারফক্সে সমর্থিত নয় বলে মনে হচ্ছে। এর পরিবর্তে সম্ভবত মিউটেশনঅবার্সার চেষ্টা করে দেখুন?
এরিকপ

0

একটি এক্সটেনশন আদমের উত্তর আধারস্থ আপনি prevend ডিফল্ট করতে হবে, এখানে একটি কাজ প্রায়:

$(document).on('DOMNodeRemoved', function(e){
        if($(e.target).hasClass('my-elm') && !e.target.hasAttribute('is-clone')){
            let clone = $(e.target).clone();
            $(clone).attr('is-clone', ''); //allows the clone to be removed without triggering the function again

            //you can do stuff to clone here (ex: add a fade animation)

            $(clone).insertAfter(e.target);
            setTimeout(() => {
                //optional remove clone after 1 second
                $(clone).remove();
            }, 1000);
        }
    });

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