I think part of the issue is that "closest" only goes "up" the DOM tree, but the div you are trying to pull data from is actually at the same level as is div you find going up the tree... I don't think I described that correctly.. let me try to illustrate:
Trucnk
Main Branch
Sub Branch
Branch A
Product Name
Branch B
Button
So from the button, the closest function is actually looking at Branch B, then Sub Branch, then Main Branch, then the Trunck... (it skips over Branch A, because Branch A is at the same level as Branch B....
But, if you can use closest to get to "Sub Branch" element (or you may have to go higher seeing that there aren't a lot of identifiable attributes at that level), you can than look inside of Sub Branch (or the element you can get) for the value you are trying to pull. When I do things like this, I try not to use positioning as that can change with slight redesigns.
Without being able to see the full DOM of you page, I don't want to try writing code suggestions for fear of pulling the wrong value without testing against against the actual code.... but seeing as how you appear to be pretty familiar with JQuery and traversing the DOM tree understanding the small detail of the current nesting structure should help you to form your own script
Or if your developers are amenable, I often ask them to add the product name as a data attribute on the button so that I can grab it without all the searching... but on some of our third party stuff, I can't do that, and yes, I have created similar pulls to the above.
If you are comfortable with the browser console, you can test your code there.. create a variable that holds the button element (I usually use CSS selectors and querySelector), so that I can hold the object in "ele"
Then, I can test my JS using ele. instead of this. (once working, I go back to this. in Launch, and test again).. but this will save a lot of Dev deployments in Launch.
Good Luck