diff --git a/core/misc/tabledrag.js b/core/misc/tabledrag.js
index 1e61eff..5728153 100644
--- a/core/misc/tabledrag.js
+++ b/core/misc/tabledrag.js
@@ -21,7 +21,7 @@
    */
   Drupal.behaviors.tableDrag = {
     attach: function (context, settings) {
-      function initTableDrag(table, base) {
+      function initTableDrag (table, base) {
         if (table.length) {
           // Create the new tableDrag instance. Save in the Drupal variable
           // to allow other scripts access to the object.
@@ -157,7 +157,7 @@
       if (this.tableSettings.hasOwnProperty(group)) { // Find the first field in this group.
         for (var d in this.tableSettings[group]) {
           if (this.tableSettings[group].hasOwnProperty(d)) {
-            var field = $table.find('.' + this.tableSettings[group][d].target + ':first');
+            var field = $table.find('.' + this.tableSettings[group][d].target).eq(0);
             if (field.length && this.tableSettings[group][d].hidden) {
               hidden = this.tableSettings[group][d].hidden;
               cell = field.closest('td');
@@ -310,18 +310,18 @@
     var self = this;
     var $item = $(item);
     // Add a class to the title link
-    $item.find('td:first a').addClass('menu-item__link');
+    $item.find('td').eq(0).find('a').addClass('menu-item__link');
     // Create the handle.
     var handle = $('<a href="#" class="tabledrag-handle"><div class="handle">&nbsp;</div></a>').attr('title', Drupal.t('Drag to re-order'));
     // Insert the handle after indentations (if any).
-    var $indentationLast = $item.find('td:first .indentation:last');
+    var $indentationLast = $item.find('td').eq(0).find('.indentation').eq(-1);
     if ($indentationLast.length) {
       $indentationLast.after(handle);
       // Update the total width of indentation in this entire table.
       self.indentCount = Math.max($item.find('.indentation').length, self.indentCount);
     }
     else {
-      $item.find('td:first').prepend(handle);
+      $item.find('td').eq(0).prepend(handle);
     }
 
     if (Modernizr.touch) {
@@ -416,7 +416,7 @@
           break;
         case 40: // Down arrow.
         case 63233: // Safari down arrow.
-          var $nextRow = $(self.rowObject.group).filter(':last').next('tr').eq(0);
+          var $nextRow = $(self.rowObject.group).eq(-1).next('tr').eq(0);
           var nextRow = $nextRow.get(0);
           while (nextRow && $nextRow.is(':hidden')) {
             $nextRow = $(nextRow).next('tr').eq(0);
@@ -435,7 +435,7 @@
                 $(nextGroup.group).each(function () {
                   groupHeight += $(this).is(':hidden') ? 0 : this.offsetHeight;
                 });
-                var nextGroupRow = $(nextGroup.group).filter(':last').get(0);
+                var nextGroupRow = $(nextGroup.group).eq(-1).get(0);
                 self.rowObject.swap('after', nextGroupRow);
                 // No need to check for indentation, 0 is the only valid one.
                 window.scrollBy(0, parseInt(groupHeight, 10));
@@ -803,7 +803,7 @@
         // Use the first row in the table as source, because it's guaranteed to
         // be at the root level. Find the first item, then compare this row
         // against it as a sibling.
-        sourceRow = $(this.table).find('tr.draggable:first').get(0);
+        sourceRow = $(this.table).find('tr.draggable').eq(0).get(0);
         if (sourceRow === this.rowObject.element) {
           sourceRow = $(this.rowObject.group[this.rowObject.group.length - 1]).next('tr.draggable').get(0);
         }
@@ -1001,7 +1001,7 @@
     var rows = [];
     var child = 0;
 
-    function rowIndentation(el, indentNum) {
+    function rowIndentation (el, indentNum) {
       var self = $(el);
       if (child === 1 && (indentNum === parentIndentation)) {
         self.addClass('tree-child-first');
@@ -1142,7 +1142,7 @@
     // Determine the valid indentations interval if not available yet.
     if (!this.interval) {
       var prevRow = $(this.element).prev('tr').get(0);
-      var nextRow = $group.filter(':last').next('tr').get(0);
+      var nextRow = $group.eq(-1).next('tr').get(0);
       this.interval = this.validIndentInterval(prevRow, nextRow);
     }
 
@@ -1155,11 +1155,11 @@
     for (var n = 1; n <= Math.abs(indentDiff); n++) {
       // Add or remove indentations.
       if (indentDiff < 0) {
-        $group.find('.indentation:first').remove();
+        $group.find('.indentation').eq(0).remove();
         this.indents--;
       }
       else {
-        $group.find('td:first').prepend(Drupal.theme('tableDragIndentation'));
+        $group.find('td').eq(0).prepend(Drupal.theme('tableDragIndentation'));
         this.indents++;
       }
     }
@@ -1239,7 +1239,7 @@
    */
   Drupal.tableDrag.prototype.row.prototype.markChanged = function () {
     var marker = Drupal.theme('tableDragChangedMarker');
-    var cell = $(this.element).find('td:first');
+    var cell = $(this.element).find('td').eq(0);
     if (cell.find('abbr.tabledrag-changed').length === 0) {
       cell.append(marker);
     }
diff --git a/core/misc/tableresponsive.js b/core/misc/tableresponsive.js
index 1bf6d07..835ef42 100644
--- a/core/misc/tableresponsive.js
+++ b/core/misc/tableresponsive.js
@@ -26,7 +26,7 @@
    * break layouts, but it provides the user with a means to access data, which
    * is a guiding principle of responsive design.
    */
-  function TableResponsive(table) {
+  function TableResponsive (table) {
     this.table = table;
     this.$table = $(table);
     this.showText = Drupal.t('Show all columns');
@@ -89,7 +89,7 @@
           var $header = $(this);
           var position = $header.prevAll('th').length;
           self.$table.find('tbody tr').each(function () {
-            var $cells = $(this).find('td:eq(' + position + ')');
+            var $cells = $(this).find('td').eq(position);
             $cells.show();
             // Keep track of the revealed cells, so they can be hidden later.
             self.$revealedCells = $().add(self.$revealedCells).add($cells);
diff --git a/core/misc/vertical-tabs.js b/core/misc/vertical-tabs.js
index 11fca70..d1c0257 100644
--- a/core/misc/vertical-tabs.js
+++ b/core/misc/vertical-tabs.js
@@ -55,8 +55,8 @@
           }
         });
 
-        $(tab_list).find('> li:first').addClass('first');
-        $(tab_list).find('> li:last').addClass('last');
+        $(tab_list).find('> li').eq(0).addClass('first');
+        $(tab_list).find('> li').eq(-1).addClass('last');
 
         if (!tab_focus) {
           // If the current URL has a fragment and one of the tabs contains an
@@ -66,7 +66,7 @@
             tab_focus = $locationHash.closest('.vertical-tabs-pane');
           }
           else {
-            tab_focus = $this.find('> .vertical-tabs-pane:first');
+            tab_focus = $this.find('> .vertical-tabs-pane').eq(0);
           }
         }
         if (tab_focus.length) {
@@ -102,7 +102,7 @@
       if (event.keyCode === 13) {
         self.focus();
         // Set focus on the first input field of the visible details/tab pane.
-        $(".vertical-tabs-pane :input:visible:enabled:first").trigger('focus');
+        $(".vertical-tabs-pane :input:visible:enabled").eq(0).trigger('focus');
       }
     });
 
@@ -154,7 +154,7 @@
       // actual DOM element order as jQuery implements sortOrder, but not as public
       // method.
       this.item.parent().children('.vertical-tab-button').removeClass('first')
-        .filter(':visible:first').addClass('first');
+        .filter(':visible').eq(0).addClass('first');
       // Display the details element.
       this.details.removeClass('vertical-tab-hidden').show();
       // Focus this tab.
@@ -172,11 +172,11 @@
       // actual DOM element order as jQuery implements sortOrder, but not as public
       // method.
       this.item.parent().children('.vertical-tab-button').removeClass('first')
-        .filter(':visible:first').addClass('first');
+        .filter(':visible').eq(0).addClass('first');
       // Hide the details element.
       this.details.addClass('vertical-tab-hidden').hide();
       // Focus the first visible tab (if there is one).
-      var $firstTab = this.details.siblings('.vertical-tabs-pane:not(.vertical-tab-hidden):first');
+      var $firstTab = this.details.siblings('.vertical-tabs-pane').not('.vertical-tab-hidden').eq(0);
       if ($firstTab.length) {
         $firstTab.data('verticalTab').focus();
       }
diff --git a/core/modules/block/js/block.js b/core/modules/block/js/block.js
index c25842f..cb4101e 100644
--- a/core/modules/block/js/block.js
+++ b/core/modules/block/js/block.js
@@ -14,7 +14,7 @@
         return;
       }
 
-      function checkboxesSummary(context) {
+      function checkboxesSummary (context) {
         var vals = [];
         var $checkboxes = $(context).find('input[type="checkbox"]:checked + label');
         for (var i = 0, il = $checkboxes.length; i < il; i += 1) {
@@ -99,7 +99,7 @@
           tableDrag.rowObject = new tableDrag.row(row);
 
           // Find the correct region and insert the row as the last in the region.
-          table.find('.region-' + select[0].value + '-message').nextUntil('.region-message').last().before(row);
+          table.find('.region-' + select[0].value + '-message').nextUntil('.region-message').eq(-1).before(row);
 
           // Modify empty regions with added or removed fields.
           checkEmptyRegions(table, row);
diff --git a/core/modules/contextual/js/contextual.js b/core/modules/contextual/js/contextual.js
index e00b011..bb0596d 100644
--- a/core/modules/contextual/js/contextual.js
+++ b/core/modules/contextual/js/contextual.js
@@ -41,7 +41,7 @@
    * @param string html
    *   The server-side rendered HTML for this contextual link.
    */
-  function initContextual($contextual, html) {
+  function initContextual ($contextual, html) {
     var $region = $contextual.closest('.contextual-region');
     var contextual = Drupal.contextual;
 
@@ -64,7 +64,7 @@
 
     // Create a model and the appropriate views.
     var model = new contextual.StateModel({
-      title: $region.find('h2:first').text().trim()
+      title: $region.find('h2').eq(0).text().trim()
     });
     var viewOptions = $.extend({el: $contextual, model: model}, options);
     contextual.views.push({
@@ -101,7 +101,7 @@
    *   A contextual links placeholder DOM element, containing the actual
    *   contextual links as rendered by the server.
    */
-  function adjustIfNestedAndOverlapping($contextual) {
+  function adjustIfNestedAndOverlapping ($contextual) {
     var $contextuals = $contextual
       // @todo confirm that .closest() is not sufficient
       .parents('.contextual-region').eq(-1)
@@ -156,7 +156,7 @@
       });
 
       // Update all contextual links placeholders whose HTML is cached.
-      var uncachedIDs = _.filter(ids, function initIfCached(contextualID) {
+      var uncachedIDs = _.filter(ids, function initIfCached (contextualID) {
         var html = storage.getItem('Drupal.contextual.' + contextualID);
         if (html !== null) {
           // Initialize after the current executation cycle, to make the AJAX
diff --git a/core/modules/editor/js/editor.formattedTextEditor.js b/core/modules/editor/js/editor.formattedTextEditor.js
index 75b20b6..faf4a6d 100644
--- a/core/modules/editor/js/editor.formattedTextEditor.js
+++ b/core/modules/editor/js/editor.formattedTextEditor.js
@@ -41,7 +41,7 @@
 
       // Store the actual value of this field. We'll need this to restore the
       // original value when the user discards his modifications.
-      this.$textElement = this.$el.find('.field-item:first');
+      this.$textElement = this.$el.find('.field-item').eq(0);
       this.model.set('originalValue', this.$textElement.html());
     },
 
diff --git a/core/modules/shortcut/shortcut.admin.js b/core/modules/shortcut/shortcut.admin.js
index 7fbdc5c..ba9b34e 100644
--- a/core/modules/shortcut/shortcut.admin.js
+++ b/core/modules/shortcut/shortcut.admin.js
@@ -9,7 +9,7 @@
   Drupal.behaviors.newSet = {
     attach: function (context, settings) {
       var selectDefault = function () {
-        $(this).closest('form').find('.form-item-set .form-type-radio:last input').prop('checked', true);
+        $(this).closest('form').find('.form-item-set .form-type-radio').eq(-1).find('input').prop('checked', true);
       };
       $('div.form-item-new input').on('focus', selectDefault).on('keyup', selectDefault);
     }
diff --git a/core/modules/simpletest/simpletest.js b/core/modules/simpletest/simpletest.js
index 7e365bd..f6ac806 100644
--- a/core/modules/simpletest/simpletest.js
+++ b/core/modules/simpletest/simpletest.js
@@ -42,7 +42,7 @@
         });
 
         // Update the group checkbox when a test checkbox is toggled.
-        function updateGroupCheckbox() {
+        function updateGroupCheckbox () {
           var allChecked = true;
           $testCheckboxes.each(function () {
             if (!$(this).prop('checked')) {
@@ -72,10 +72,10 @@
       var $rows;
       var searched = false;
 
-      function filterTestList(e) {
+      function filterTestList (e) {
         var query = $(e.target).val().toLowerCase();
 
-        function showTestRow(index, row) {
+        function showTestRow (index, row) {
           var $row = $(row);
           var $sources = $row.find('.table-filter-text-source');
           var textMatch = $sources.text().toLowerCase().indexOf(query) !== -1;
diff --git a/core/modules/text/text.js b/core/modules/text/text.js
index 10aed14..72e96ef 100644
--- a/core/modules/text/text.js
+++ b/core/modules/text/text.js
@@ -11,9 +11,9 @@
         var $widget = $(this).closest('.text-format-wrapper');
 
         var $summary = $widget.find('.text-summary-wrapper');
-        var $summaryLabel = $summary.find('label').first();
+        var $summaryLabel = $summary.find('label').eq(0);
         var $full = $widget.find('.text-full').closest('.form-item');
-        var $fullLabel = $full.find('label').first();
+        var $fullLabel = $full.find('label').eq(0);
 
         // Create a placeholder label when the field cardinality is greater
         // than 1.
diff --git a/core/modules/tour/js/tour.js b/core/modules/tour/js/tour.js
index cee9feb..3f569ce 100644
--- a/core/modules/tour/js/tour.js
+++ b/core/modules/tour/js/tour.js
@@ -207,7 +207,7 @@
             $(this).find('.tour-progress').text(progress);
           })
           // Update the last item to have "End tour" as the button.
-          .last()
+          .eq(-1)
           .attr('data-text', Drupal.t('End tour'));
       }
     }
diff --git a/core/modules/views_ui/js/views-admin.js b/core/modules/views_ui/js/views-admin.js
index c3c5b8d..d15ac29 100644
--- a/core/modules/views_ui/js/views-admin.js
+++ b/core/modules/views_ui/js/views-admin.js
@@ -241,7 +241,7 @@
       var $addDisplayDropdown = $('<li class="add"><a href="#"><span class="icon add"></span>' + Drupal.t('Add') + '</a><ul class="action-list" style="display:none;"></ul></li>');
       var $displayButtons = $menu.nextAll('input.add-display').detach();
       $displayButtons.appendTo($addDisplayDropdown.find('.action-list')).wrap('<li>')
-        .parent().first().addClass('first').end().last().addClass('last');
+        .parent().eq(0).addClass('first').end().eq(-1).addClass('last');
       // Remove the 'Add ' prefix from the button labels since they're being palced
       // in an 'Add' dropdown.
       // @todo This assumes English, but so does $addDisplayDropdown above. Add
@@ -695,7 +695,7 @@
         // Within the row, the operator labels are displayed inside the first table
         // cell (next to the filter name).
         var $draggableRow = $(this.draggableRows[i]);
-        var $firstCell = $draggableRow.find('td:first');
+        var $firstCell = $draggableRow.find('td').eq(0);
         if ($firstCell.length) {
           // The value of the operator label ("And" or "Or") is taken from the
           // first operator dropdown we encounter, going backwards from the current
@@ -821,7 +821,7 @@
    */
   Drupal.behaviors.viewsUiChangeDefaultWidget = {
     attach: function () {
-      function changeDefaultWidget(event) {
+      function changeDefaultWidget (event) {
         if ($(event.target).prop('checked')) {
           $('input.default-radios').hide();
           $('td.any-default-radios-row').parent().hide();
