webForumDet fria alternativet

jQuery each och replaceWith?

JavaScript

2 svar · 1 391 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1

Denna funkar bra

var txt = $("h2").html();
var svgText = createSVGtext(txt, 500, 100);
$("h2").replaceWith( '<svg id="txt" width="100%" height="100%" viewBox="0 0 1000 200"></svg>');
$('#txt').append(svgText);

Men så fort jag gör en loop av det hela verkar det inte funka.

 $('h2').each(function() {
  var $this = $(this);
  var txt = $this.text();
  var svgText = createSVGtext(txt, 500, 50);
  $($this).replaceWith('<svg width="100%" height="100%" viewBox="0 0 1000 200">' + svgText.innerHTML + '</svg>');
});

Har jag missat något?

Medlem sedan juni 20019 519 inlägg
#2

ser ut att det borde fungera, det du kan göra är att ta bort $() runt $this för det är ju redan ett jQuery objekt.

 $('h2').each(function() {
  var $this = $(this);
  var txt = $this.text();
  //var svgText = createSVGtext(txt, 500, 50);
  $this.replaceWith('<b>' + txt + '</b>');
});

fungera med som exempelvis, men jag gissar på att svgText är en SVG objekt och inte text.
vad gör createSVGtext?

fungera:

$('h2').each(function() {
  var $this = $(this);
  var txt = $this.text();
  var svgText = createSVGtext(txt, 500, 50);
  var svg = $('<svg width="100%" height="100%" viewBox="0 0 1000 200"/>').append(svgText);
  $this.replaceWith(svg);
});

bättre?

Medlem sedan nov. 20017 144 inlägg
#3

Yes!
funktionen createSVGtext splittar upp SVG-text i flera tspan-element. Då SVG 1.1-text inte fattar textstycken.
1000 tack!

254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)