diff --git a/lib/scripts/page.js b/lib/scripts/page.js
index f5d84e2392bd1b5c195726c6dc9eede02ee1e43e..05c5ece208829057137cb0b4bcac9a62c6a392df 100644
--- a/lib/scripts/page.js
+++ b/lib/scripts/page.js
@@ -19,24 +19,20 @@ dw_page = {
      */
     sectionHighlight: function() {
         jQuery('form.btn_secedit')
-            .mouseover(function(e){
-                var tgt = this.parentNode;
-                var nr = tgt.className.match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2];
-                do {
-                    tgt = tgt.previousSibling;
-                } while (tgt !== null && typeof tgt.tagName === 'undefined');
-                if (tgt === null) return;
-                while(typeof tgt.className === 'undefined' ||
-                      tgt.className.match('(\\s+|^)sectionedit' + nr + '(\\s+|$)') === null) {
-                    if (typeof tgt.className !== 'undefined') {
-                        jQuery(tgt).addClass('section_highlight');
-                    }
-                    tgt = (tgt.previousSibling !== null) ? tgt.previousSibling : tgt.parentNode;
-                }
+            .mouseover(function(){
+                var $tgt = jQuery(this).parent();
+                var nr = $tgt.attr('class').match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2];
 
-                jQuery(tgt).addClass('section_highlight');
+                // Walk the DOM tree up (first previous siblings, then parents)
+                // until boundary element
+                while($tgt.length > 0 && !$tgt.hasClass('sectionedit' + nr)) {
+                    // $.last gives the DOM-ordered last element:
+                    // prev if present, else parent.
+                    $tgt = $tgt.prev().add($tgt.parent()).last();
+                    $tgt.addClass('section_highlight');
+                }
             })
-            .mouseout(function(e){
+            .mouseout(function(){
                 jQuery('.section_highlight').removeClass('section_highlight');
             });
     },