diff --git a/core/modules/views/js/ajax_view.es6.js b/core/modules/views/js/ajax_view.es6.js
index 9423bb1d6..004c3b923 100644
--- a/core/modules/views/js/ajax_view.es6.js
+++ b/core/modules/views/js/ajax_view.es6.js
@@ -18,8 +18,8 @@
       const {
         views: { ajaxViews },
       } = settings;
-      Object.keys(ajaxViews || {}).forEach((i) => {
-        Drupal.views.instances[i] = new Drupal.views.ajaxView(ajaxViews[i]);
+       Drupal.views.sortByNestingLevel(ajaxViews).forEach(({ key, value }) => {
+         Drupal.views.instances[key] = new Drupal.views.ajaxView(value);
       });
     }
   };
@@ -49,6 +49,35 @@
    * @type {object.<string, Drupal.views.ajaxView>}
    */
   Drupal.views.instances = {};
+  
+  /**
+   * Sort the view Javascript objects by nesting level.
+      *
+   * @param {object} ajaxViews
+   *   The views JavaScript object.
+   * @param {string} settings.view_dom_id
+   *   The DOM id of the view.
+   * @param {string} settings.selector
+   *   The selector of the view.
+   *
+   * @return {object}
+   *   The sorted ajaxViews object.
+   */
+  Drupal.views.sortByNestingLevel = function (ajaxViews) {
+    const ajaxViewsArray = Object.keys(ajaxViews || {}).map((key) => {
+      ajaxViews[key].selector = `.js-view-dom-id-${ajaxViews[key].view_dom_id}`;
+
+      return {
+        key,
+        value: ajaxViews[key],
+        nestingLevel: $(ajaxViews[key].selector).parents('.view').length,
+      };
+    });
+
+    return ajaxViewsArray.sort((a, b) => b.nestingLevel - a.nestingLevel);
+  };
+
+  /*
 
   /**
    * JavaScript object for a certain view.
@@ -61,7 +90,7 @@
    *   The DOM id of the view.
    */
   Drupal.views.ajaxView = function (settings) {
-    const selector = `.js-view-dom-id-${settings.view_dom_id}`;
+    const { selector } = settings;
     this.$view = $(selector);
 
     // Retrieve the path to use for views' ajax.
@@ -110,13 +139,23 @@
     );
 
     // Add the ajax to pagers.
-    once(
-      'ajax-pager',
-      this.$view
-        // Don't attach to nested views. Doing so would attach multiple behaviors
-        // to a given element.
-        .filter($.proxy(this.filterNestedViews, this)),
-    ).forEach($.proxy(this.attachPagerAjax, this));
+    if (this.$view.find('.views-infinite-scroll-content-wrapper').length) {
+      this.$pager_links = this.$view.find(
+        'ul.js-pager__items > li > a, th.views-field a, .attachment .views-summary a',
+      );
+      this.$pager_links
+        .once('ajax-pager')
+        .each($.proxy(this.attachPagerLinkAjax, this));
+    }
+    else {
+      once(
+        'ajax-pager',
+        this.$view
+          // Don't attach to nested views. Doing so would attach multiple
+          // behaviors to a given element.
+          .filter($.proxy(this.filterNestedViews, this)),
+      ).forEach($.proxy(this.attachPagerAjax, this));
+    }
 
     // Add a trigger to update this view specifically. In order to trigger a
     // refresh use the following code.
@@ -129,28 +168,34 @@
       base: this.selector,
       element: this.$view.get(0),
     });
+    // Remove unwanted parameter.
+    delete selfSettings.selector;
     this.refreshViewAjax = Drupal.ajax(selfSettings);
   };
 
   /**
-   * @method
+   * Attach the ajax behavior to exposed form fields.
+   *
+   * @param {HTMLElement} form
+   *   The form element.
    */
-  Drupal.views.ajaxView.prototype.attachExposedFormAjax = function () {
-    const that = this;
+  Drupal.views.ajaxView.prototype.attachExposedFormAjax = function (form) {
+    if (!form) {
+      form = this.$exposed_form;
+    }
     this.exposedFormAjax = [];
     // Exclude the reset buttons so no AJAX behaviors are bound. Many things
     // break during the form reset phase if using AJAX.
-    $(
-      'input[type=submit], button[type=submit], input[type=image]',
-      this.$exposed_form,
-    )
-      .not('[data-drupal-selector=edit-reset]')
-      .each(function (index) {
-        const selfSettings = $.extend({}, that.element_settings, {
-          base: $(this).attr('id'),
-          element: this,
+    $('input[type=submit], button[type=submit], input[type=image]', form)
+      .not('[data-drupal-selector=edit-reset],[data-drupal-selector^="edit-tab-selector"]')
+      .each((index, element) => {
+        const selfSettings = $.extend({}, this.element_settings, {
+          base: $(element).attr('id'),
+          element,
         });
-        that.exposedFormAjax[index] = Drupal.ajax(selfSettings);
+        // Remove unwanted parameter.
+        delete selfSettings.selector;
+        this.exposedFormAjax[index] = Drupal.ajax(selfSettings);
       });
   };
 
@@ -202,6 +247,8 @@
       base: false,
       element: link,
     });
+    // Remove unwanted parameter.
+    delete selfSettings.selector;
     this.pagerAjax = Drupal.ajax(selfSettings);
   };
 
diff --git a/core/modules/views/js/ajax_view.js b/core/modules/views/js/ajax_view.js
index d82425071..8ace22a14 100644
--- a/core/modules/views/js/ajax_view.js
+++ b/core/modules/views/js/ajax_view.js
@@ -9,8 +9,10 @@
   Drupal.behaviors.ViewsAjaxView.attach = function (context, settings) {
     if (settings && settings.views && settings.views.ajaxViews) {
       var ajaxViews = settings.views.ajaxViews;
-      Object.keys(ajaxViews || {}).forEach(function (i) {
-        Drupal.views.instances[i] = new Drupal.views.ajaxView(ajaxViews[i]);
+      Drupal.views.sortByNestingLevel(ajaxViews).forEach(function (_ref) {
+        var key = _ref.key,
+          value = _ref.value;
+        Drupal.views.instances[key] = new Drupal.views.ajaxView(value);
       });
     }
   };
@@ -30,8 +32,22 @@
   };
   Drupal.views = {};
   Drupal.views.instances = {};
+  Drupal.views.sortByNestingLevel = function (ajaxViews) {
+    var ajaxViewsArray = Object.keys(ajaxViews || {}).map(function (key) {
+      ajaxViews[key].selector = ".js-view-dom-id-".concat(ajaxViews[key].view_dom_id);
+      return {
+        key: key,
+        value: ajaxViews[key],
+        nestingLevel: $(ajaxViews[key].selector).parents('.view').length
+      };
+    });
+    return ajaxViewsArray.sort(function (a, b) {
+      return b.nestingLevel - a.nestingLevel;
+    });
+  };
+
   Drupal.views.ajaxView = function (settings) {
-    var selector = ".js-view-dom-id-".concat(settings.view_dom_id);
+    var selector = settings.selector;
     this.$view = $(selector);
     var ajaxPath = drupalSettings.views.ajax_path;
     if (ajaxPath.constructor.toString().indexOf('Array') !== -1) {
@@ -57,31 +73,39 @@
     this.settings = settings;
     this.$exposed_form = $("form#views-exposed-form-".concat(settings.view_name.replace(/_/g, '-'), "-").concat(settings.view_display_id.replace(/_/g, '-')));
     once('exposed-form', this.$exposed_form).forEach($.proxy(this.attachExposedFormAjax, this));
-    once('ajax-pager', this.$view.filter($.proxy(this.filterNestedViews, this))).forEach($.proxy(this.attachPagerAjax, this));
+    if (this.$view.find('.views-infinite-scroll-content-wrapper').length) {
+      this.$pager_links = this.$view.find('ul.js-pager__items > li > a, th.views-field a, .attachment .views-summary a');
+      this.$pager_links.once('ajax-pager').each($.proxy(this.attachPagerLinkAjax, this));
+    }
+    else {
+      once('ajax-pager', this.$view.filter($.proxy(this.filterNestedViews, this))).forEach($.proxy(this.attachPagerAjax, this));
+    }
     var selfSettings = $.extend({}, this.element_settings, {
       event: 'RefreshView',
       base: this.selector,
       element: this.$view.get(0)
     });
+    delete selfSettings.selector;
     this.refreshViewAjax = Drupal.ajax(selfSettings);
   };
-  Drupal.views.ajaxView.prototype.attachExposedFormAjax = function () {
-    var that = this;
+  Drupal.views.ajaxView.prototype.attachExposedFormAjax = function (form) {
+    var _this = this;
+
+    if (!form) {
+      form = this.$exposed_form;
+    }
+
     this.exposedFormAjax = [];
-    $('input[type=submit], button[type=submit], input[type=image]', this.$exposed_form).not('[data-drupal-selector=edit-reset]').each(function (index) {
-      var selfSettings = $.extend({}, that.element_settings, {
-        base: $(this).attr('id'),
-        element: this
+    $('input[type=submit], button[type=submit], input[type=image]', form).not('[data-drupal-selector=edit-reset],[data-drupal-selector^="edit-tab-selector"]').each(function (index, element) {
+      var selfSettings = $.extend({}, _this.element_settings, {
+        base: $(element).attr('id'),
+        element: element
       });
-      that.exposedFormAjax[index] = Drupal.ajax(selfSettings);
+      delete selfSettings.selector;
+      _this.exposedFormAjax[index] = Drupal.ajax(selfSettings);
     });
   };
-  Drupal.views.ajaxView.prototype.filterNestedViews = function () {
-    return !this.$view.parents('.view').length;
-  };
-  Drupal.views.ajaxView.prototype.attachPagerAjax = function () {
-    this.$view.find('ul.js-pager__items > li > a, th.views-field a, .attachment .views-summary a').each($.proxy(this.attachPagerLinkAjax, this));
-  };
+
   Drupal.views.ajaxView.prototype.attachPagerLinkAjax = function (id, link) {
     var $link = $(link);
     var viewData = {};
@@ -92,8 +116,18 @@
       base: false,
       element: link
     });
+    delete selfSettings.selector;
     this.pagerAjax = Drupal.ajax(selfSettings);
   };
+
+  Drupal.views.ajaxView.prototype.filterNestedViews = function () {
+    return !this.$view.parents('.view').length;
+  };
+
+  Drupal.views.ajaxView.prototype.attachPagerAjax = function () {
+    this.$view.find('ul.js-pager__items > li > a, th.views-field a, .attachment .views-summary a').each($.proxy(this.attachPagerLinkAjax, this));
+  };
+
   Drupal.AjaxCommands.prototype.viewsScrollTop = function (ajax, response) {
     var offset = $(response.selector).offset();
     var scrollTarget = response.selector;
@@ -106,4 +140,4 @@
       }, 500);
     }
   };
-})(jQuery, Drupal, drupalSettings);
\ No newline at end of file
+})(jQuery, Drupal, drupalSettings);
