From 585a7b85d82325ac3ce58b60be1350af9d4e1f72 Mon Sep 17 00:00:00 2001 From: alexnaidovich <32612122+alexnaidovich@users.noreply.github.com> Date: Fri, 14 Sep 2018 22:57:19 +0300 Subject: [PATCH 1/6] Introduce options -> selectorToInsert --- auto-complete.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index 2f5a88c..8c05f2c 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -37,6 +37,7 @@ var autoComplete = (function(){ offsetTop: 1, cache: 1, menuClass: '', + selectorToInsert: 0, renderItem: function (item, search){ // escape special characters search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); @@ -82,7 +83,12 @@ var autoComplete = (function(){ } } addEvent(window, 'resize', that.updateSC); - document.body.appendChild(that.sc); + + if (o.selectorToInsert && o.selectorToInsert instanceof HTMLElement) { + o.selectorToInsert.appendChild(that.sc); + } else { + document.body.appendChild(that.sc); + } live('autocomplete-suggestion', 'mouseleave', function(e){ var sel = that.sc.querySelector('.autocomplete-suggestion.selected'); @@ -204,7 +210,16 @@ var autoComplete = (function(){ that.setAttribute('autocomplete', that.autocompleteAttr); else that.removeAttribute('autocomplete'); - document.body.removeChild(that.sc); + try { + if (o.selectorToInsert && o.selectorToInsert.querySelector(elems[i])) { + o.selectorToInsert.removeChild(that.sc); + } else { + document.body.removeChild(that.sc); + } + } catch (error) { + console.log('Destroying error: can\'t fild target selector', error); + throw error; + } that = null; } }; From 9386423c0013436f039dd45e773646d38480bd40 Mon Sep 17 00:00:00 2001 From: alexnaidovich Date: Fri, 14 Sep 2018 23:28:59 +0300 Subject: [PATCH 2/6] add testcase --- testcase.html | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 testcase.html diff --git a/testcase.html b/testcase.html new file mode 100644 index 0000000..effab0e --- /dev/null +++ b/testcase.html @@ -0,0 +1,39 @@ + + + + + + + Document + + + +
+ +
+ + + + + + \ No newline at end of file From 9f9ce9c7c7cfaa9079ae79e6f884bc358cf274fc Mon Sep 17 00:00:00 2001 From: alexnaidovich Date: Fri, 14 Sep 2018 23:30:11 +0300 Subject: [PATCH 3/6] selectorToInsert accepts string --- auto-complete.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index 8c05f2c..6edc89d 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -84,8 +84,8 @@ var autoComplete = (function(){ } addEvent(window, 'resize', that.updateSC); - if (o.selectorToInsert && o.selectorToInsert instanceof HTMLElement) { - o.selectorToInsert.appendChild(that.sc); + if (o.selectorToInsert !== 0) { + document.querySelector(o.selectorToInsert).appendChild(that.sc); } else { document.body.appendChild(that.sc); } @@ -211,8 +211,8 @@ var autoComplete = (function(){ else that.removeAttribute('autocomplete'); try { - if (o.selectorToInsert && o.selectorToInsert.querySelector(elems[i])) { - o.selectorToInsert.removeChild(that.sc); + if (o.selectorToInsert) { + document.querySelector(o.selectorToInsert).removeChild(that.sc); } else { document.body.removeChild(that.sc); } From 5af6458c0cd142783723f6c28f52e7d7a060ec96 Mon Sep 17 00:00:00 2001 From: alexnaidovich Date: Sat, 15 Sep 2018 13:38:41 +0300 Subject: [PATCH 4/6] destroy: test parent element --- auto-complete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto-complete.js b/auto-complete.js index 6edc89d..ab61ad1 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -211,7 +211,7 @@ var autoComplete = (function(){ else that.removeAttribute('autocomplete'); try { - if (o.selectorToInsert) { + if (o.selectorToInsert && document.querySelector(o.selectorToInsert).contains(that.sc)) { document.querySelector(o.selectorToInsert).removeChild(that.sc); } else { document.body.removeChild(that.sc); From e11c6789006d66d348bd6c78d0efab4dbf9e81db Mon Sep 17 00:00:00 2001 From: alexnaidovich Date: Sat, 15 Sep 2018 13:39:17 +0300 Subject: [PATCH 5/6] typo correction --- auto-complete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto-complete.js b/auto-complete.js index ab61ad1..b17cc49 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -217,7 +217,7 @@ var autoComplete = (function(){ document.body.removeChild(that.sc); } } catch (error) { - console.log('Destroying error: can\'t fild target selector', error); + console.log('Destroying error: can\'t find target selector', error); throw error; } that = null; From 411683466b64f5fc2c17e65d39344b9b494a8c6f Mon Sep 17 00:00:00 2001 From: alexnaidovich Date: Sat, 15 Sep 2018 13:39:49 +0300 Subject: [PATCH 6/6] append: test parent element --- auto-complete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto-complete.js b/auto-complete.js index b17cc49..df33bc7 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -84,7 +84,7 @@ var autoComplete = (function(){ } addEvent(window, 'resize', that.updateSC); - if (o.selectorToInsert !== 0) { + if (typeof o.selectorToInsert === "string" && document.querySelector(o.selectorToInsert) instanceof HTMLElement) { document.querySelector(o.selectorToInsert).appendChild(that.sc); } else { document.body.appendChild(that.sc);