# Filter Options Node

**URL:** https://discourse.nodered.org/t/filter-options-node/43803
**Category:** Developing Nodes
**Created:** [7 April 2021 09:24 UTC](https://discourse.nodered.org/t/filter-options-node/43803 "2021-04-07T09:24:53Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![jake123](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@jake123](https://discourse.nodered.org/u/jake123)
#### Post date: [7 April 2021 09:24 UTC](https://discourse.nodered.org/t/filter-options-node/43803/1 "2021-04-07T09:24:53Z")

</div>

Any idea why this code doesnt work? Until the commented part everything works. I get all the data from the api but cant filter it.

```auto
 fetch(url)
          .then((res) => res.json())
          .then((data) => {
            opt = data;
            console.log(data);
            opt.forEach((item) => {
              options.push({
                //v: `SUBSCRIBE ${item.deviceName} ${item.name} WebEvent/1.0`,
                v: `SUBSCRIBE ${item.name} WebEvent/1.0`,
                t: item.name,
              });
            });
            for (let i = 0; i < options.length; i++) {
              let value = options[i].v;
              let text = options[i].t;
              $("#node-input-options").append(
                $("<option></option>").attr("value", value).text(text)
              );
              // Until Here Everything Works
              let inputEl = $("#node-input-filter");
              inputEl.on("keyup", () => {
                var keyword = $("#node-input-filter");
                var fleet = $("#node-input-options");

                var txt = fleet.options[i].text();
                if (
                  txt.substring(0, keyword.length).toLowerCase() !==
                    keyword.toLowerCase() &&
                  keyword.trim() !== ""
                ) {
                  fleet.options[i].style.display = "none";
                } else {
                  fleet.options[i].style.display = "list-item";
                }

```

---

<div class="post-metadata">

### Author: ![knolleary](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/knolleary/32/3_2.png) [@knolleary](https://discourse.nodered.org/u/knolleary)
#### Post date: [7 April 2021 09:29 UTC](https://discourse.nodered.org/t/filter-options-node/43803/2 "2021-04-07T09:29:32Z")

</div>

You need to explain what 'works' means to you. What is the expected behaviour of this code. What does it do?

---

<div class="post-metadata">

### Author: ![jake123](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@jake123](https://discourse.nodered.org/u/jake123)
#### Post date: [7 April 2021 09:43 UTC](https://discourse.nodered.org/t/filter-options-node/43803/3 "2021-04-07T09:43:57Z")

</div>

Until the comment the code gets the data and stores it in the dropdown that triggers oneditprepare.  
For now i have 8 objects given back and Im displaying their name.  
I want to make a filter because later on i will have 100 of objects

 ![fasfa](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/b/9/b97ba5563467eb0df2d8daef69f6038d00bd0dbb.png) . This is my node.

---

<div class="post-metadata">

### Author: ![jake123](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@jake123](https://discourse.nodered.org/u/jake123)
#### Post date: [7 April 2021 12:31 UTC](https://discourse.nodered.org/t/filter-options-node/43803/4 "2021-04-07T12:31:53Z")

</div>

I almost made it work.

```auto
     let selectTag = $("#node-input-options")[0];
            let inputEl = $("#node-input-filter").val().toLowerCase();
            let elem = $("#node-input-filter");
            for (let i = 0; i < options.length; i++) {
              let value = options[i].v;
              let text = options[i].t;

              $("#node-input-options").append(
                $("<option></option>").attr("value", value).text(text)
              );
              const filter = () => {
                let optionEl = options[i];
                let txt = selectTag.options[i].text;
               
                selectTag.options[i].style.display =
                  txt.search(new RegExp(inputEl.replace(/\s+/, "|"))) != -1
                    ? ""
                    : "none";
              };
              elem.on("keyup", filter());

```

The problem now is that it doesnt always filter. When i try to filter with letter s i get nothing back. When i filter with letter ee i get all 3 speed etc

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)
#### Post date: [6 June 2021 12:32 UTC](https://discourse.nodered.org/t/filter-options-node/43803/5 "2021-06-06T12:32:44Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
