2 Stimmen

XSLT : Wie man einen bedingten Link ohne doppelten Code erstellt

Die generierte HTML-Seite enthält Verweislinks, die manchmal nicht auf meiner Seite vorhanden sind. Ich sollte diesen Link als einfaches Label anzeigen. Derzeit ist dies der Fall:

<xsl:choose>
 <xsl:when test="$nb_action != 0">
  <a href="#action">Action (offensive, defensive, reconnaissance)</a>
 </xsl:when>
 <xsl:otherwise>
  Action (offensive, defensive, reconnaissance)
 </xsl:otherwise>
</xsl:choose>

Ich frage mich, wie ich meinen Code vereinfachen kann, wie ich den Knoten deaktivieren kann <a></a> ?

Meine erste Idee war, eine spezielle css-Klasse zu delegieren:

<a href="#action">
 <xsl:if test="$nb_action = 0">
  <xsl:attribute name="class">inactive</xsl:attribute>
 </xsl:if>Action (offensive, defensive, reconnaissance)
</a>

Aber es bleibt ein Link...

Eine Abhilfe, die folgt:

<a><xsl:if test="$nb_action != 0">
  <xsl:attribute name="href">#action</xsl:attribute>
 </xsl:if>Action (offensive, defensive, reconnaissance)</a>

Es ist richtig, ein html zu schreiben <a> Tag ohne href ?

2voto

kennytm Punkte 488916

Sie könnten den Aktionstext als Variable einrichten. Diese Variable erscheint aber immer noch an 3 Stellen.

<xsl:variable name="textval">
Action (offensive, defensive, reconnaissance)</xsl:variable>
<xsl:choose>
 <xsl:when test="0">
  <a href="#action"><xsl:copy-of select="$textval"/></a>
 </xsl:when>
 <xsl:otherwise>
  <xsl:copy-of select="$textval"/>
 </xsl:otherwise>
</xsl:choose>

Edit: Alternativ, wenn Sie nichts gegen eine zusätzliche, nutzlose span Tag, könnten Sie verwenden

  <xsl:variable name="condition" select="---condition-here---"/>

  <xsl:variable name="tagname">
   <xsl:choose>
    <xsl:when test="$condition">a</xsl:when>
    <xsl:otherwise>span</xsl:otherwise>
   </xsl:choose>
  </xsl:variable>

  <xsl:element name="{$tagname}">
   <xsl:if test="$condition">
    <xsl:attribute name="href">#action</xsl:attribute>
   </xsl:if>
   Action (offensive, defensive, reconnaissance)
  </xsl:element>

(In Firefox, wenn wir die $tagname auf eine leere Zeichenkette, dann wird das Element überhaupt nicht angewendet. Der Prozessor könnte aber auch einen Fehler auslösen Verlassen Sie sich also nicht darauf.)

0voto

codymanix Punkte 26958

Warum speichern Sie die Zeichenkette Action(..) nicht in einer Variablen und diese im Code?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X