Set unique ID to SVG graph path

Tags: , , ,



How to set unique ID to SVG graph path elements. The graph is created using leaflet.js Path elements are dynamically generated and I need to style them individually, so I thought of giving them unique ID.

<svg pointer-events="none" class="leaflet-zoom-animated" width="900" height="665" viewBox="-75 -55 900 665" style="transform: translate3d(-75px, -55px, 0px);">
    <g>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M120 271L133 282L139 279L147 284L155 274L137 258z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M98 284L119 275L125 288L105 295z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M64 296L95 287L99 297L92 302L91 308L75 308L68 310z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M160 302L168 309L173 305L179 311L178 317L187 323L196 310L171 288z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M190 326L195 330L202 326L201 336L198 344L222 339L219 331L201 314z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M155 311L148 334L151 340L181 343L186 337z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M71 348L93 351L90 363L79 362L75 374L88 376L87 387L75 388L74 396L87 399L85 410L67 408z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M53 429L83 452L78 498L67 493L46 453L43 442L44 429z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M90 521L107 533L118 532L111 519L108 503L99 501L92 505z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M91 453L90 463L95 469L87 475L93 487L99 495L111 491L113 469L119 452L115 444z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M131 414L143 416L154 405L175 395L191 390L214 386L233 385L236 364L150 356L141 365z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M160 239L168 251L176 246L174 237L185 235L191 229L179 217z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M178 243L188 254L208 234L213 223L200 216z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M191 268L202 279L209 272L204 266L224 249L228 243L217 233z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M225 307L229 297L233 304L247 291L242 285L249 277L258 284L247 313L237 320z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M223 309L231 297L239 301L246 290L251 276L257 285L255 295L239 319z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M274 296L281 277L328 267L332 279L330 286z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M303 216L317 262L324 261L327 236L322 211z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M302 213L317 260L325 260L328 244L321 211z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M214 187L223 197L237 209L245 213L252 207L231 189L247 179L242 167z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M309 172L315 190L310 197L300 196L296 177z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M51 408L44 406L38 345L53 350z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M31 302L36 330L51 331L47 301z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M243 169L253 189L283 173L276 152z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M281 152L291 173L295 151z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M68 317L71 326L76 331L89 334L91 327L77 316z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M128 293L141 302L146 293L139 283z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M266 205L284 202L287 190L283 181L275 187L270 193L264 190L261 196z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M211 270L220 277L242 255L247 240L236 237L233 248z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M97 385L96 410L113 413L121 387L104 387z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M251 320L268 385L355 372L365 423L398 420L378 366L391 364L402 377L423 378L429 351L490 325L513 320L547 295L588 284L587 270L570 258L536 252L492 240L464 276z"></path>
        <path class="hotspot-default leaflet-interactive" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M535 163L501 230L534 238L555 233L573 241L599 259L606 275L608 285L627 300L655 331L655 356L653 377L672 355L685 326L687 314L695 305L698 289L702 278L702 269z"></path>
        <path class="hotspot-default leaflet-interactive hotspot-active" stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" d="M363 280L429 268L463 250L483 223L503 190L517 162L425 84L315 133z"></path>
    </g>
</svg>

Please help.

Answer

As I’ve commented you don’t need an id for styling. You can use nth-of-type or nth-child.

path:nth-of-type(1){stroke:red}
path:nth-of-type(2){stroke:green}

Also you can reduce verbosity by moving stroke="#3388ff" stroke-opacity="1" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="#3388ff" fill-opacity="0.2" fill-rule="evenodd" in CSS

path {
  stroke: #3388ff;
  stroke-opacity: 1;
  stroke-width: 3;
  stroke-linecap: round;
  stroke-linejoin: round;
  fill: #3388ff;
  fill-opacity: 0.2;
  fill-rule: evenodd;
}

path:nth-of-type(1){stroke:red}
path:nth-of-type(2){stroke:green}
<svg pointer-events="none" class="leaflet-zoom-animated" width="900" height="665" viewBox="25 60 700 500" >
    <g id="kk">
        <path class="hotspot-default leaflet-interactive"  d="M120 271L133 282L139 279L147 284L155 274L137 258z"></path>
        <path class="hotspot-default leaflet-interactive" d="M98 284L119 275L125 288L105 295z"></path>
        <path class="hotspot-default leaflet-interactive" d="M64 296L95 287L99 297L92 302L91 308L75 308L68 310z"></path>
        <path class="hotspot-default leaflet-interactive" d="M160 302L168 309L173 305L179 311L178 317L187 323L196 310L171 288z"></path>
        <path class="hotspot-default leaflet-interactive" d="M190 326L195 330L202 326L201 336L198 344L222 339L219 331L201 314z"></path>
        <path class="hotspot-default leaflet-interactive" d="M155 311L148 334L151 340L181 343L186 337z"></path>
        <path class="hotspot-default leaflet-interactive" d="M71 348L93 351L90 363L79 362L75 374L88 376L87 387L75 388L74 396L87 399L85 410L67 408z"></path>
        <path class="hotspot-default leaflet-interactive" d="M53 429L83 452L78 498L67 493L46 453L43 442L44 429z"></path>
        <path class="hotspot-default leaflet-interactive" d="M90 521L107 533L118 532L111 519L108 503L99 501L92 505z"></path>
        <path class="hotspot-default leaflet-interactive" d="M91 453L90 463L95 469L87 475L93 487L99 495L111 491L113 469L119 452L115 444z"></path>
        <path class="hotspot-default leaflet-interactive" d="M131 414L143 416L154 405L175 395L191 390L214 386L233 385L236 364L150 356L141 365z"></path>
        <path class="hotspot-default leaflet-interactive" d="M160 239L168 251L176 246L174 237L185 235L191 229L179 217z"></path>
        <path class="hotspot-default leaflet-interactive" d="M178 243L188 254L208 234L213 223L200 216z"></path>
        <path class="hotspot-default leaflet-interactive" d="M191 268L202 279L209 272L204 266L224 249L228 243L217 233z"></path>
        <path class="hotspot-default leaflet-interactive" d="M225 307L229 297L233 304L247 291L242 285L249 277L258 284L247 313L237 320z"></path>
        <!--<path class="hotspot-default leaflet-interactive"  d="M223 309L231 297L239 301L246 290L251 276L257 285L255 295L239 319z"></path>-->
        <path class="hotspot-default leaflet-interactive" d="M274 296L281 277L328 267L332 279L330 286z"></path>
        <!--<path class="hotspot-default leaflet-interactive" d="M303 216L317 262L324 261L327 236L322 211z"></path>-->
        <path class="hotspot-default leaflet-interactive" d="M302 213L317 260L325 260L328 244L321 211z"></path>
        <path class="hotspot-default leaflet-interactive" d="M214 187L223 197L237 209L245 213L252 207L231 189L247 179L242 167z"></path>
        <path class="hotspot-default leaflet-interactive" d="M309 172L315 190L310 197L300 196L296 177z"></path>
        <path class="hotspot-default leaflet-interactive" d="M51 408L44 406L38 345L53 350z"></path>
        <path class="hotspot-default leaflet-interactive" d="M31 302L36 330L51 331L47 301z"></path>
        <path class="hotspot-default leaflet-interactive" d="M243 169L253 189L283 173L276 152z"></path>
        <path class="hotspot-default leaflet-interactive" d="M281 152L291 173L295 151z"></path>
        <path class="hotspot-default leaflet-interactive" d="M68 317L71 326L76 331L89 334L91 327L77 316z"></path>
        <path class="hotspot-default leaflet-interactive" d="M128 293L141 302L146 293L139 283z"></path>
        <path class="hotspot-default leaflet-interactive" d="M266 205L284 202L287 190L283 181L275 187L270 193L264 190L261 196z"></path>
        <path class="hotspot-default leaflet-interactive" d="M211 270L220 277L242 255L247 240L236 237L233 248z"></path>
        <path class="hotspot-default leaflet-interactive" d="M97 385L96 410L113 413L121 387L104 387z"></path>
        <path class="hotspot-default leaflet-interactive" d="M251 320L268 385L355 372L365 423L398 420L378 366L391 364L402 377L423 378L429 351L490 325L513 320L547 295L588 284L587 270L570 258L536 252L492 240L464 276z"></path>
        <path class="hotspot-default leaflet-interactive" d="M535 163L501 230L534 238L555 233L573 241L599 259L606 275L608 285L627 300L655 331L655 356L653 377L672 355L685 326L687 314L695 305L698 289L702 278L702 269z"></path>
        <path class="hotspot-default leaflet-interactive hotspot-active" d="M363 280L429 268L463 250L483 223L503 190L517 162L425 84L315 133z"></path>
    </g>
</svg>

However if you still think you need to add `id-s in JavaScript, here is how I would do it (btw @DogukanCavus is perfectly valid):

let paths = document.querySelectorAll(".leaflet-zoom-animated path");
paths.forEach((p,i)=>{p.id = `path${i}`})
path {
  stroke: #3388ff;
  stroke-opacity: 1;
  stroke-width: 3;
  stroke-linecap: round;
  stroke-linejoin: round;
  fill: #3388ff;
  fill-opacity: 0.2;
  fill-rule: evenodd;
}


#path0{stroke:red}
#path1{stroke:green}
<svg pointer-events="none" class="leaflet-zoom-animated" width="900" height="665" viewBox="25 60 700 500" >
    <g id="kk">
        <path class="hotspot-default leaflet-interactive"  d="M120 271L133 282L139 279L147 284L155 274L137 258z"></path>
        <path class="hotspot-default leaflet-interactive" d="M98 284L119 275L125 288L105 295z"></path>
        <path class="hotspot-default leaflet-interactive" d="M64 296L95 287L99 297L92 302L91 308L75 308L68 310z"></path>
        <path class="hotspot-default leaflet-interactive" d="M160 302L168 309L173 305L179 311L178 317L187 323L196 310L171 288z"></path>
        <path class="hotspot-default leaflet-interactive" d="M190 326L195 330L202 326L201 336L198 344L222 339L219 331L201 314z"></path>
        <path class="hotspot-default leaflet-interactive" d="M155 311L148 334L151 340L181 343L186 337z"></path>
        <path class="hotspot-default leaflet-interactive" d="M71 348L93 351L90 363L79 362L75 374L88 376L87 387L75 388L74 396L87 399L85 410L67 408z"></path>
        <path class="hotspot-default leaflet-interactive" d="M53 429L83 452L78 498L67 493L46 453L43 442L44 429z"></path>
        <path class="hotspot-default leaflet-interactive" d="M90 521L107 533L118 532L111 519L108 503L99 501L92 505z"></path>
        <path class="hotspot-default leaflet-interactive" d="M91 453L90 463L95 469L87 475L93 487L99 495L111 491L113 469L119 452L115 444z"></path>
        <path class="hotspot-default leaflet-interactive" d="M131 414L143 416L154 405L175 395L191 390L214 386L233 385L236 364L150 356L141 365z"></path>
        <path class="hotspot-default leaflet-interactive" d="M160 239L168 251L176 246L174 237L185 235L191 229L179 217z"></path>
        <path class="hotspot-default leaflet-interactive" d="M178 243L188 254L208 234L213 223L200 216z"></path>
        <path class="hotspot-default leaflet-interactive" d="M191 268L202 279L209 272L204 266L224 249L228 243L217 233z"></path>
        <path class="hotspot-default leaflet-interactive" d="M225 307L229 297L233 304L247 291L242 285L249 277L258 284L247 313L237 320z"></path>
        <!--<path class="hotspot-default leaflet-interactive"  d="M223 309L231 297L239 301L246 290L251 276L257 285L255 295L239 319z"></path>-->
        <path class="hotspot-default leaflet-interactive" d="M274 296L281 277L328 267L332 279L330 286z"></path>
        <!--<path class="hotspot-default leaflet-interactive" d="M303 216L317 262L324 261L327 236L322 211z"></path>-->
        <path class="hotspot-default leaflet-interactive" d="M302 213L317 260L325 260L328 244L321 211z"></path>
        <path class="hotspot-default leaflet-interactive" d="M214 187L223 197L237 209L245 213L252 207L231 189L247 179L242 167z"></path>
        <path class="hotspot-default leaflet-interactive" d="M309 172L315 190L310 197L300 196L296 177z"></path>
        <path class="hotspot-default leaflet-interactive" d="M51 408L44 406L38 345L53 350z"></path>
        <path class="hotspot-default leaflet-interactive" d="M31 302L36 330L51 331L47 301z"></path>
        <path class="hotspot-default leaflet-interactive" d="M243 169L253 189L283 173L276 152z"></path>
        <path class="hotspot-default leaflet-interactive" d="M281 152L291 173L295 151z"></path>
        <path class="hotspot-default leaflet-interactive" d="M68 317L71 326L76 331L89 334L91 327L77 316z"></path>
        <path class="hotspot-default leaflet-interactive" d="M128 293L141 302L146 293L139 283z"></path>
        <path class="hotspot-default leaflet-interactive" d="M266 205L284 202L287 190L283 181L275 187L270 193L264 190L261 196z"></path>
        <path class="hotspot-default leaflet-interactive" d="M211 270L220 277L242 255L247 240L236 237L233 248z"></path>
        <path class="hotspot-default leaflet-interactive" d="M97 385L96 410L113 413L121 387L104 387z"></path>
        <path class="hotspot-default leaflet-interactive" d="M251 320L268 385L355 372L365 423L398 420L378 366L391 364L402 377L423 378L429 351L490 325L513 320L547 295L588 284L587 270L570 258L536 252L492 240L464 276z"></path>
        <path class="hotspot-default leaflet-interactive" d="M535 163L501 230L534 238L555 233L573 241L599 259L606 275L608 285L627 300L655 331L655 356L653 377L672 355L685 326L687 314L695 305L698 289L702 278L702 269z"></path>
        <path class="hotspot-default leaflet-interactive hotspot-active" d="M363 280L429 268L463 250L483 223L503 190L517 162L425 84L315 133z"></path>
    </g>
</svg>


Source: stackoverflow