Преобразование первой строчной буквы в заглавную, а остальные буквы в нижнем регистре с двумя разделителями

Используйте $("span").closest('div'):

if($("span").closest('div').hasClass("foo")){
  console.log('found');
}
.foo{
  color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">
<span>Hello</span>
</div>

0
задан michael.hor257k 20 January 2019 в 05:34
поделиться

1 ответ

Не могли бы вы иметь более двух разделителей в будущем? Если это так, попробуйте этот XSLT, который можно легко расширить, чтобы иметь больше разделителей (одного символа). Просто измените параметры delimiters в шаблоне ConvertXmlStyleToCamelCase.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="item">
        <item>
            <xsl:call-template name="ConvertXmlStyleToCamelCase" />
        </item>
    </xsl:template>

    <xsl:template name="ConvertXmlStyleToCamelCase">
        <xsl:param name="text" select="."/>
        <xsl:param name="delimiters" select="' /'"/>

        <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
        <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
        <xsl:variable name="nextDelimiter" select="substring(translate($text, translate($text, $delimiters, ''), ''), 1, 1)" />
        <xsl:variable name="string" select="substring-before(concat($text, ' '), substring(concat($nextDelimiter, ' '), 1, 1))" />

        <xsl:message terminate="no">Next delimiter is <xsl:value-of select="$nextDelimiter" /></xsl:message>

        <xsl:value-of select="translate(substring($string, 1, 1), $lower, $upper)"/>
        <xsl:value-of select="translate(substring($string, 2), $upper, $lower)"/>

        <xsl:if test="$nextDelimiter">
            <xsl:value-of select="$nextDelimiter" />
            <xsl:call-template name="ConvertXmlStyleToCamelCase">
                <xsl:with-param name="text" select="substring-after($text, $nextDelimiter)"/>
                <xsl:with-param name="delimiters" select="$delimiters"/>  
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

См. В действии на http://xsltfiddle.liberty-development.net/gWvjQeR , где я использовал третий разделитель в качестве примера.

Что касается двойного перевода, цель этого состоит в том, чтобы найти следующий разделитель в строке. Для этого (в XSLT 1.0) вам необходимо удалить все символы, которые не являются разделителями. Выполнение translate($text, $delimiters, '') удаляет все разделители и возвращает все символы, которые не являются разделителями. Если вы затем примените этот результат к исходной строке, у вас останутся только разделители. Первый символ будет следующим разделителем.

0
ответ дан Tim C 20 January 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: