clean_node_old.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * DevExtreme (integration/knockout/clean_node_old.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var ko = require("knockout");
  11. var compareVersion = require("../../core/utils/version").compare;
  12. var strategyChanging = require("../../core/element_data").strategyChanging;
  13. var patchCleanData = function(jQuery) {
  14. var cleanKoData = function(element, andSelf) {
  15. var cleanNode = function() {
  16. ko.cleanNode(this)
  17. };
  18. if (andSelf) {
  19. element.each(cleanNode)
  20. } else {
  21. element.find("*").each(cleanNode)
  22. }
  23. };
  24. var originalEmpty = jQuery.fn.empty;
  25. jQuery.fn.empty = function() {
  26. cleanKoData(this, false);
  27. return originalEmpty.apply(this, arguments)
  28. };
  29. var originalRemove = jQuery.fn.remove;
  30. jQuery.fn.remove = function(selector, keepData) {
  31. if (!keepData) {
  32. var subject = this;
  33. if (selector) {
  34. subject = subject.filter(selector)
  35. }
  36. cleanKoData(subject, true)
  37. }
  38. return originalRemove.call(this, selector, keepData)
  39. };
  40. var originalHtml = jQuery.fn.html;
  41. jQuery.fn.html = function(value) {
  42. if ("string" === typeof value) {
  43. cleanKoData(this, false)
  44. }
  45. return originalHtml.apply(this, arguments)
  46. };
  47. var originalReplaceWith = jQuery.fn.replaceWith;
  48. jQuery.fn.replaceWith = function() {
  49. var result = originalReplaceWith.apply(this, arguments);
  50. if (!this.parent().length) {
  51. cleanKoData(this, true)
  52. }
  53. return result
  54. }
  55. };
  56. strategyChanging.add(function(strategy) {
  57. var isJQuery = !!strategy.fn;
  58. if (isJQuery && compareVersion(strategy.fn.jquery, [2, 0]) < 0) {
  59. patchCleanData(strategy)
  60. }
  61. });