diff -u b/core/modules/contextual/js/contextual.js b/core/modules/contextual/js/contextual.js --- b/core/modules/contextual/js/contextual.js +++ b/core/modules/contextual/js/contextual.js @@ -67,7 +67,7 @@ function adjustIfNestedAndOverlapping($contextual) { var $contextuals = $contextual.parents('.contextual-region').eq(-1).find('.contextual'); - if ($contextuals.length === 1) { + if ($contextuals.length <= 1) { return; } @@ -108,7 +108,7 @@ .find('.contextual'); // Early-return when there's no nesting. - if ($contextuals.length <= 1) { + if ($contextuals.length === 1) { return; } diff -u b/core/modules/quickedit/js/quickedit.js b/core/modules/quickedit/js/quickedit.js --- b/core/modules/quickedit/js/quickedit.js +++ b/core/modules/quickedit/js/quickedit.js @@ -167,11 +167,19 @@ var entityID = extractEntityID(fieldID); var entityElementSelector = '[data-quickedit-entity-id="' + entityID + '"]'; - var entityElement = $(fieldElement).closest(entityElementSelector); + var $entityElement = $(entityElementSelector); + + if (!$entityElement.length) { + throw Drupal.t('The field [data-quickedit-field-id="@fieldID"] parent attribute [data-quickedit-entity-id] is missing.', { + '@fieldID': fieldID + }); + } + + var entityElement = $(fieldElement).closest($entityElement); if (entityElement.length === 0) { - var $lowestCommonParent = $(entityElementSelector).parents().has(fieldElement).first(); - entityElement = $lowestCommonParent.find(entityElementSelector); + var $lowestCommonParent = $entityElement.parents().has(fieldElement).first(); + entityElement = $lowestCommonParent.find($entityElement); } var entityInstanceID = entityElement.get(0).getAttribute('data-quickedit-entity-instance-id'); @@ -366,24 +374,14 @@ // [data-quickedit-entity-id] element's data-quickedit-entity-instance-id // attribute. var entityElementSelector = '[data-quickedit-entity-id="' + entityID + '"]'; - var $entityElement = $(entityElementSelector); - - // If there are no elements returned from `entityElementSelector` - // throw an error. Check the browser console for this message. - if (!$entityElement.length) { - throw Drupal.t('The field [data-quickedit-field-id="@fieldID"] parent attribute [data-quickedit-entity-id] is missing.', { - '@fieldID': fieldID - }); - } - - var entityElement = $(fieldElement).closest($entityElement); + var entityElement = $(fieldElement).closest(entityElementSelector); // In the case of a full entity view page, the entity title is rendered // outside of "the entity DOM node": it's rendered as the page title. So in // this case, we find the lowest common parent element (deepest in the tree) // and consider that the entity element. if (entityElement.length === 0) { - var $lowestCommonParent = $entityElement.parents().has(fieldElement).first(); - entityElement = $lowestCommonParent.find($entityElement); + var $lowestCommonParent = $(entityElementSelector).parents().has(fieldElement).first(); + entityElement = $lowestCommonParent.find(entityElementSelector); } var entityInstanceID = entityElement .get(0) only in patch2: unchanged: --- a/core/modules/contextual/js/contextual.es6.js +++ b/core/modules/contextual/js/contextual.es6.js @@ -108,7 +108,7 @@ .find('.contextual'); // Early-return when there's no nesting. - if ($contextuals.length === 1) { + if ($contextuals.length <= 1) { return; } only in patch2: unchanged: --- a/core/modules/quickedit/js/quickedit.es6.js +++ b/core/modules/quickedit/js/quickedit.es6.js @@ -366,14 +366,24 @@ // [data-quickedit-entity-id] element's data-quickedit-entity-instance-id // attribute. var entityElementSelector = '[data-quickedit-entity-id="' + entityID + '"]'; - var entityElement = $(fieldElement).closest(entityElementSelector); + var $entityElement = $(entityElementSelector); + + // If there are no elements returned from `entityElementSelector` + // throw an error. Check the browser console for this message. + if (!$entityElement.length) { + throw Drupal.t('The field [data-quickedit-field-id="@fieldID"] parent attribute [data-quickedit-entity-id] is missing.', { + '@fieldID': fieldID + }); + } + + var entityElement = $(fieldElement).closest($entityElement); // In the case of a full entity view page, the entity title is rendered // outside of "the entity DOM node": it's rendered as the page title. So in // this case, we find the lowest common parent element (deepest in the tree) // and consider that the entity element. if (entityElement.length === 0) { - var $lowestCommonParent = $(entityElementSelector).parents().has(fieldElement).first(); - entityElement = $lowestCommonParent.find(entityElementSelector); + var $lowestCommonParent = $entityElement.parents().has(fieldElement).first(); + entityElement = $lowestCommonParent.find($entityElement); } var entityInstanceID = entityElement .get(0)