Is it possible to include a unique attribute in an SVG file?

I've experimented with various methods, but I'm unable to make it work. Is there a way to assign custom attributes to an SVG element? Here's the code snippet I'm using:

var svgns = "http://www.w3.org/2000/svg";
var rect = document.createElementNS(svgns,'rect');
rect.setAttributeNS(null, 'x', 0);
rect.setAttributeNS(null, 'y', 0);
rect.setAttributeNS(null, 'height', 20);
rect.setAttributeNS(null, 'width', 20);
rect.setAttributeNS(null, 'fill', 'blue');
rect.setAttributeNS(null, 'id', '999');

// My attempt here
rect.setAttributeNS(null, 'foo', 'bar');

rect.addEventListener('click',
    function() {
        alert(this.foo);
    }
    ,false);

document.getElementById('yard').appendChild(rect);

When I click on the rect, I expect it to display the value of the attribute 'foo'. However, it currently shows undefined. Any ideas?

Answer №1

Try using this.getAttribute('foo').

var svgns = "http://www.w3.org/2000/svg";
var circle = document.createElementNS(svgns, 'circle');
circle.setAttributeNS(null, 'cx', 30);
circle.setAttributeNS(null, 'cy', 30);
circle.setAttributeNS(null, 'r', 10);
circle.setAttributeNS(null, 'fill', 'red');
circle.setAttributeNS(null, 'id', '123');

// your code here
circle.setAttributeNS(null, 'foo', 'baz');

circle.addEventListener('mouseover',
  function() {
    alert(this.getAttribute('foo'));
  }, false);

document.getElementById('canvas').appendChild(circle);
<svg id="canvas"></svg>

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

JS failing to detect click events

I am working on triggering a Google Analytics event when a user interacts with a "sign up" link or button. Here is the code snippet I am using: <script> JQuery(document).ready(function() { $( ".menu-item" ).click(function() { ga('send&apo ...

Unable to enclose an element with an HTML structure

I am attempting to take all the elements marked with the table tag and envelop them in an HTML structure to make the tables responsive. However, it appears that my current approach is not yielding the desired results. Can you please provide some insight ...

An AJAX request will only occur if there is an alert triggered on a particular computer

Here's an interesting issue I encountered with my company's CMS newsletter system. It seems that the AJAX call to send an email works flawlessly in all modern browsers and operating systems, except for one client. This particular client is using ...

If the body's height is adjusted, the page will automatically scroll to the top

I'm facing an issue where a button on my HTML page triggers a popup box to open (which covers the background). To prevent the background from scrolling, I am using the following CSS: windowHeight = $(window).height(); $("body").css({ "height": wi ...

Find the total number of table rows that exist between two specific rows using jQuery

<table> <tr id="family_1"> <td>Family 1</td> </tr> <tr class="member"> <td>Member 1</td> </tr> <tr class="member"> <td>Member 2</td> </tr> ... <tr ...

Using express to activate http compression

Currently experimenting with the Darksky API and came across a query parameter that caught my attention: The extend=hourly option is available. With this option, hour-by-hour data for the next 168 hours will be returned rather than just the next 48. It i ...

What is the best way to define defaultProps for a nested object?

Within a react component, there is a nested object defined in the propTypes. This setup is functioning correctly. UserCard.propTypes = { name: PropTypes.string, customer: PropTypes.shape({ email: PropTypes.string, phoneNumber: PropTypes.string, ...

Is it possible to rotate the JW Player using CSS or jQuery?

I am currently utilizing a JW Player to stream a video through the rtmp protocol. Here is how the code appears: <div id="mediaspace2" >This text will be replaced</div></div> <script> jwplayer("mediaspace2").setup({ flashplayer: ...

Styling nested divs in CSS

I am experiencing an issue where the child divs within parent divs are overflowing outside of the parent divs. To get a better understanding of the problem, please try running the code below in a browser: My goal is to align the innermost divs horizontall ...

Adjust mesh tessellation level using scroll control

On this page (), you can see how the meshes forming the text continuously come together and then separate in a loop, as demonstrated in the source code here: https://github.com/mrdoob/three.js/blob/dev/examples/webgl_modifier_tessellation.html. I am inter ...

How can you achieve the effect of "hovering over an image to automatically start playing a muted video within the image itself"?

[![enter image description here][1]][1]I am working with WordPress and Elementor, and I want to create a hover effect where an image triggers a muted video to play within the image area on mouseover. The video should stop playing when the mouse is not hove ...

What is the method for retrieving the destination URL of a dropdown item using Puppeteer?

My challenge is to identify the destination URL for the "Edit" option in a dropdown menu using Puppeteer. Is there a specific method to obtain this URL through Puppeteer? <div _ngcontent-c34="" class="dropdown-menu" ngbdropdownmenu ...

Vue combined with Grapejs

Currently, I am utilizing Grapejs with Vue and everything appears to be functioning properly. However, I am encountering an issue with the "grapesjs-preset-webpage" library. I am struggling to incorporate additional HTML options, such as "Columns", "Video ...

Different ways to analyze elements from 2 arrays to hone in on specific values

I'm really struggling to solve this issue. I have two arrays - one for cars and the other for active filters. The cars array consists of HTML li tags with attributes like car type, number of seats, price, etc. On the other hand, the active_filters arr ...

Using Cheerio with a Node.js bot

I am currently utilizing Cheerio to extract information from web pages in my .js files. However, I would like these files to automatically restart every 1 day to check for any new data. Instead of using setTimeout, which may not be efficient for managing ...

"Exploring the Mini Drawer feature on Material UI brings up a whole new page for the Link

Currently, I am working on a project that involves updating stocks using Material UI. I have implemented a mini drawer from Material UI, but when I click on the menu link, it routes to a new page instead of rendering on the homepage itself. In my App.JS f ...

Displaying a message when there are no results in Vue.js using transition-group and encountering the error message "children must be keyed

Utilizing vue.js, I crafted a small data filter tool that boasts sleek transitions for added flair. However, I encountered an issue with displaying a message when there are no results matching the current filters. Here's what I attempted: <transit ...

Dynamic drop-down navigation with rearranging menu

I am attempting to design a drop-down navigation bar with 2 rows. Initially, only 1 row is visible. Upon clicking the visible row, both rows should appear. Subsequently, when one of the 2 rows is clicked, only that specific row should be displayed. Below a ...

Is there a way to verify that all of my HTML elements have been loaded in AngularJS?

I am currently utilizing angularJS version 1.2.1 along with angular-ui-bootstrap. Within my code, I have a collection of <ng-includes> tags from angularjs and <accordion> components from angular-ui. When loading the content, I need to initiat ...

Error: Calculation of date 30 days in the past incorrect

Currently, I am in the process of developing a function that compares the current date with an expiration date. The input, expireStamp, is represented as a timestamp measured in milliseconds. compDate = function(expireStamp) { // Convert the timestam ...