首页>Program>source

我无法解决应该是一个简单解决方案的问题.我想替换标签标签中的文本,而不影响其他"兄弟姐妹"(如果存在)。

Sample markup:

<fieldset class="myFieldsetClass">
    <legend>Sample Fieldset</legend>
    <ol>
        <li>
            <label>
                <span class="marker">*</span>
                Some Label 1
            </label>
        </li>
        <li>
            <label>
                Some Label 2
            </label>
        </li>
        <li>
            <label>
                Text that doesn't match...
            </label>
        </li>
    </ol>
</fieldset>

Goal:

  • To replace text Some Label XSome Label (即删除 X 来自标签文字)。
  • 标签中的
  • span标签必须完整无缺,例如 <span class="marker"> 以上.
  • 我不知道 X的value ,长度可能为1个或更多字符。

Current Script:

下面的我的jQuery脚本有效,但是我知道效率很低.由于某种原因,我似乎无法将头缠住……

//for each label in the fieldset that contains text "Some Label "
$(".myFieldsetClass label:contains('Some Label ')").each(function() {
    if ($(this).has("span").length > 0) {
        //if the label has the span tag within, remove it and prepend it back to the replaced text
        $(this).find("span").remove().prependTo($(this).text(labelText));
    }
    else {
        //otherwise just replace the text
        $(this).text('Some Label');
    }
}); 

我认为起初我可以做:

$(".myFieldsetClass label:contains('Some Label ')").text("Some Label");

但是这会清除标签的所有内容,因此会删除跨度,这是我不希望的.我不能使用任何替换功能来替换 Some Label XSome Label 因为我不知道什么 会。

有人可以建议更优雅/更有效的方法来解决此问题吗?

谢谢。

X

尝试了多个答案之后,我认为问题似乎是,即使我选择了正确的集合,它们仍然是文本节点,jquery似乎不想对其进行修改。.我已经使用FireBug选择了集合 (下面的许多答案正确选择,但方式略有不同).在Firebug控制台中,结果集为:

EDIT

问题似乎是调用.replacewith()、. replace()、. text()等似乎不影响jquery集合.如果我允许上述集合包含一个跨度,则针对该跨度正确调用.replacewith(),.replace()等函数,但文本节点保持不变。.

[<TextNode textContent="Some Label 1:">, <TextNode textContent="Some Label 2:">, <TextNode textContent="Some Label 3:">, <TextNode textContent="Some Label 4:">, <TextNode textContent="Some Label 5:">]
最新回答
  • 1月前
    1 #

    尝试 :

    $(".myFieldsetClass label:contains('Some Label ')").contents().filter(':last-child').text("Some Label");
    

    这应该工作,假设要替换的文本始终在末尾.维兹威兹 函数选择所有节点,包括文本节点。

    http://api.jquery.com/contents/

    编辑:我应该使用filter()而不是find().已更正。

    编辑:现在可以使用.这是一种方法。

    contents()
    

  • 1月前
    2 #

    正如patrick所指出的,您可以使用 // Store proper labels in a variable for quick and accurate reference var $labelCollection = $(".myFieldsetClass label:contains('Some Label ')"); // Call contents(), grab the last one and remove() it $labelCollection.each(function() { $(this).contents().last().remove() }); // Then simply append() to the label whatever text you wanted. $labelCollection.append('some text') 仅选择文本,然后对所有文本进行替换.修改此处给出的示例,您也可以尝试:

    contents()
    

    但是,如果您知道"某些标签"将始终是 $(".myFieldsetClass label:contains('Some Label ')").contents().filter(function() { return this.nodeType == 3 && $(this).is(":contains('Some Label ')"); }) .replaceWith("Some Label");中的最后一个元素 那么我相信patrick的方法会更快。

  • 1月前
    3 #

    为什么不简单地使用正则表达式进行整个替换呢?

    <label>
    

  • 1月前
    4 #

    单线:

    $(".myFieldsetClass label:contains('Some Label ')")
        .each(function() {
                $(this).html($(this).html().replace(/Some Label ./, "Some Label")); 
            });
    
    $('.myFieldsetClass label').contents().last().remove().end().first().after('New Label')

  • .net:您能解释为什么DirectoryInfoGetFiles产生此IOException吗?
  • c#:在ASPNET中使用EXCHANGE SERVER(Microsoft Outlook web Access)发送邮件