当前位置:  开发笔记 > 编程语言 > 正文

jQuery替换文本,让兄弟姐妹完好无损

如何解决《jQuery替换文本,让兄弟姐妹完好无损》经验,为你挑选了2个好方法。

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

样本标记:

Sample Fieldset

目标:

要替换文本Some Label XSome Label(即删除X从标签文本).

标签内的span标签必须保持不变(如果存在),如上所述.

我不知道它的值X,可能是1个或更多字符长.

当前脚本:

我的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 X,Some Label因为我不知道X会是什么.

任何人都可以建议更优雅/有效的方法解决这个问题吗?

谢谢.

编辑

尝试多个答案后,我认为问题似乎是即使我选择了正确的集合,它们也是文本节点,jquery似乎不想修改..我已经使用FireBug来选择集合(很多答案)下面所有选择正确但方式略有不同).在firebug控制台中产生的结果是:

[,
 , 
 , 
 , 
 ]

问题似乎是调用.replaceWith(),. renplace(),. text()等似乎不会影响jquery集合.如果我允许上面的集合包含其中一个跨度,那么调用.replaceWith(),. renplace()等对跨度正确运行,但文本节点保持原样.



1> user113716..:

尝试:

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

假设要替换的文本总是在最后,这应该可行.该contents()函数选择所有节点,包括文本节点.

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

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

编辑:现在工作.这是一种方式.

// 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')



2> Sean Vieira..:

正如帕特里克指出的那样,您可以contents()单独选择文本,然后对其进行全部替换.调整那里给出的例子,你也可以尝试:

$(".myFieldsetClass label:contains('Some Label ')").contents().filter(function() {
  return this.nodeType == 3 && $(this).is(":contains('Some Label ')");
})
.replaceWith("Some Label");

但是,如果你知道"Some Label"将永远是帕特里克方法中的最后一个元素,我相信会更快.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有