# Get NodeID from inside OnEditPrepare

**URL:** <https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227>\
**Category:** Developing Nodes\
**Created:** [18 November 2024 15:01 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227 "2024-11-18T15:01:45Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mike7833](https://avatars.discourse-cdn.com/v4/letter/m/58956e/32.png) [@Mike7833](https://discourse.nodered.org/u/Mike7833)\
**Post date:** [18 November 2024 15:01 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/1 "2024-11-18T15:01:45Z")

</div>

I have a use-case where I need to get a Node's ID from inside OnEditPrepare in the Node's HTML frontend code.

I figured out a way to do it but it seems clunky and am wondering if there is something built-in I can access or is there a better way to do it.

My method was to create a small script to load into custom nodes:  
**/resources/MyCustomNode/GetNodeID.js**

```auto
//
// Add this to any node where you want access to the NodeID
// from within the NodeRed HTML code like inside OnEditPrepare
//
// window.myNodeID
//

if (!window.myNodeID) {
    window.myNodeID = null;
    // Event listener for selection changes in the Node-RED workspace
    RED.events.on('view:selection-changed', function(event) {
        if (event.nodes && event.nodes.length > 0) {
            window.myNodeID = event.nodes[0].id;
        } else {
            window.myNodeID = null;
        }
    });
}

```

And then load and access it in my Custom Node as such...

```auto
<script src="/resources/MyCustomNode/GetNodeID.js"></script>
<script type="text/javascript">

    RED.nodes.registerType('MyCustomNode',{
        category: 'SomeCategory',
        color: '#FDD0A2',
        inputs:1,
        outputs:1,
        icon: 'font-awesome/fa-arrow-right',
        align: 'right',
        label: ()=> { return this.nodeLabel||'MyCustomNode' },
        oneditprepare: ()=>{ 
                console.log('My Node ID: ', window.myNodeID);
            }
        }
    });

```

I looked for a while but couldn't find anything.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [18 November 2024 15:20 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/2 "2024-11-18T15:20:33Z")

</div>

Have you tried inspecting `this.id` in your oneditprepare function?

---

<div class="post-metadata">

**Author:** ![Mike7833](https://avatars.discourse-cdn.com/v4/letter/m/58956e/32.png) [@Mike7833](https://discourse.nodered.org/u/Mike7833)\
**Post date:** [18 November 2024 15:47 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/3 "2024-11-18T15:47:29Z")

</div>

When I inspect "this" there is no parameter called "id".

```auto
        oneditprepare: ()=>{ console.log(this); }

```

Unless I'm doing something wrong, I don't see it.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [18 November 2024 15:49 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/4 "2024-11-18T15:49:53Z")

</div>

> [@Mike7833](#):
>
> `oneditprepare: ()=>{ console.log(this); }`

what about now?

```js
oneditprepare: function() {
   console.log(this.id);
}

```

---

<div class="post-metadata">

**Author:** ![Mike7833](https://avatars.discourse-cdn.com/v4/letter/m/58956e/32.png) [@Mike7833](https://discourse.nodered.org/u/Mike7833)\
**Post date:** [18 November 2024 15:52 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/5 "2024-11-18T15:52:45Z")

</div>

It returns

```auto
undefined

```

I must be doing something wrong but not sure what.

---

<div class="post-metadata">

**Author:** ![Mike7833](https://avatars.discourse-cdn.com/v4/letter/m/58956e/32.png) [@Mike7833](https://discourse.nodered.org/u/Mike7833)\
**Post date:** [18 November 2024 15:54 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/6 "2024-11-18T15:54:17Z")

</div>

Ok. I see now. Changed it **function()** and it works.

Thanks. Much easier.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [18 November 2024 15:54 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/7 "2024-11-18T15:54:54Z")

</div>

> [@Mike7833](#):
>
> Changed it **function()** and it works.

Yup - do you want to know why - or do you already know why that is?

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [18 November 2024 15:58 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/8 "2024-11-18T15:58:16Z")

</div>

In short, arrow functions do not bind their own `this`, for node-red nodes, we need the "correct" this.

[https://www.codementor.io/@dariogarciamoya/understanding-this-in-javascript-with-arrow-functions-gcpjwfyuc](https://www.codementor.io/@dariogarciamoya/understanding-this-in-javascript-with-arrow-functions-gcpjwfyuc)

---

<div class="post-metadata">

**Author:** ![Mike7833](https://avatars.discourse-cdn.com/v4/letter/m/58956e/32.png) [@Mike7833](https://discourse.nodered.org/u/Mike7833)\
**Post date:** [18 November 2024 15:59 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/9 "2024-11-18T15:59:48Z")

</div>

Nope not sure exactly why... guessing it has to do with scoping.

Thanks for the explanation

---

<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:** [2 December 2024 16:00 UTC](https://discourse.nodered.org/t/get-nodeid-from-inside-oneditprepare/93227/10 "2024-12-02T16:00:37Z")

</div>

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