Skip to content
Advertisement

Set unique ID to SVG graph path

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.

Advertisement

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>
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement