【问题标题】:Can jquery functions be used to easily convert a string to a tree, manipulate a node, and convert back into a string?可以使用jquery函数轻松地将字符串转换为树,操作节点并转换回字符串吗?
【发布时间】:2011-02-01 13:30:31
【问题描述】:

能否使用 jquery 函数轻松将字符串转换为树、操作节点以及转换回字符串?

原始问题:选择器和 .html() 等 jquery 函数如何用于字符串操作?

更新:

首先jquery可以用于以下吗? (我稍后会验证)

var b = $('<a href="#">bacon</a>').html(); 

b === 'bacon',答案是肯定的。

如何使用jQuery进行字符串操作:(修改自a sample highlighting answer

var key = 'bacon';
var str = '<a href="#">bacon</a><a href="#">tastes great</a>';
$(str).contents().each(function() {
  var node = this;
  if (node.nodeType == 3) {
    var text = node.nodeValue;
    text = text.replace(new RegExp(key, "g"),
            '<span class="Someclass">'+key+'</span>'
        ));
    //replace existing node value with text
});
// convert tree into string

所需的输出是带有修改元素的字符串:

str = '<a href="#"><span class="Someclass">bacon</span</a><a href="#">tastes great</a>';

【问题讨论】:

  • 我对这个问题投了一个罕见的反对票,我想解释一下原因。对于您的第一个示例,您问“does b === 'bacon'”。您已经输入了代码 - 您没有尝试过吗?我认为,一个很好的问题表明您已经完成了一些工作并解释了迄今为止的结果。这样,当有人通过搜索找到它时,他们甚至可以从问题中学到一些东西,并从答案中学到更多。我没有冒犯的意思,我希望你能明白我的意思,并更加坚定地保持 SO 上的内容真的很棒。
  • innerHTML 是浏览器功能,不是 jQuery 功能,它是字符串,不是函数。
  • 清理了问题,正在使用 jquery 的 html 方法修改我的浏览器 html
  • 投反对票理解内森,当然如果他们在这里提出更好的问题。我会继续编辑问题。

标签: javascript jquery html string


【解决方案1】:

是的,但你想要.html()

var b = $('<a href="#">bacon</a>').html();
// Or,
var b = $('<a href="#">bacon</a>')[0].innerHTML;

至于第二个例子:

$('<a href="#">bacon</a>').html(function (i, oldHtml) {
    return oldHtml.replace(/(bacon)/g, '<span class="SomeClass">$1</span>');
});

【讨论】:

  • 我想匹配所有不在标签中的文本。这是我正在玩的小提琴jsfiddle.net/victusfate/uVczc
  • 匹配所有文本不同:$(str).contents().each(function () {if (this.nodeType==3) $(this).wrap('&lt;span class="SomeClass"&gt;');});
  • @Mark,你的 jsfiddle 有一些问题。 1:不要将 document.write 与 document.ready 结合使用(jsfiddle 会自动执行此操作)。而是使用$('&lt;div&gt;' + str + '&lt;/div&gt;').appendTo('body')。 2:CSS 使用:,而不是=。 3:您需要用另一个.html()检索.html(function () ...)之后的值,例如str = $(str).html(function () ...).html().
  • 谢谢,正在摆弄 css(语法记忆力差​​)。将交换写入,非常感谢最后一个提示->我正在使用的字符串中可以有几个 html 元素。我的小提琴也通过更新跳到 /1,必须将其重置为基本版本(仍然习惯它)
【解决方案2】:

我会说“不完全是”。您尝试进行的特定更改可以如 Box9 所示完成,但就语义而言,据我所知,我会说您不使用 jQuery 进行字符串操作。

jQuery 可用于读取和修改 DOM,其存在部分是为了使该过程成为跨浏览器的标准。

一旦您阅读了 DOM,但在更新它之前,您解析和更改它的部分可以通过操作字符串来完成,但实际的字符串操作将使用纯 Javascript。

【讨论】:

  • gotcha,应该使用专用的字符串操作工具包或 javascript 的默认值
【解决方案3】:

我已经读过这个问题和相应的 cmets & 链接几次了,但我仍然不确定实际的问题是什么,但是......

jquery 函数可以轻松使用吗 将字符串转换为树,操作 一个节点,并转换回一个 字符串?

是的。

诀窍是使用包装元素,以及 jQuery html() 和 text() 方法。 Here is a fiddle 告诉你我的意思。

有时,您想使用文本来获取元素中的所有文本,而不是像包装 标记那样抓取所有子元素。在它是一个 dom 元素之后,您可以使用 dom 操作来追加、添加类、修改属性以及所有类似的东西,然后再将其转换回字符串。

这就是你要找的答案吗?

编辑:Doh!在我打字的时候得到了回答

【讨论】:

  • 如果您的答案要求较少,我肯定会选择它。我曾想象这种类型的操作将是一个或两个班轮,没有额外的插件。我错了。注意到我提出的解决方案存在一些问题。
  • 为了澄清我正在寻找以字符串格式存在的 html 数据中的特定文本键。您的小提琴从 someClass 访问数据并添加了一个额外的类,这不是我所需要的。
【解决方案4】:

使用Ben Alman's replaceTextobject to html string 转换器技巧让它工作

function one() {
    var key = 'bacon';
    var str = '<a href="#">bacon nation</a> <a href="#">tastes good</a>';
    dump("before str contents: " + str);
    str = $(str).replaceText(new RegExp(key,"gi"),'<span class="SomeClass">' + key + '</span>');
    str = $('<div>').append($(str).clone()).remove().html();
    dump("after str contents: " + str);
}

以及所需的输出:

<a href="#"><span class="SomeClass">bacon</span> nation</a><a href="#">tastes good</a>

为了完整起见,我已经包含了主要调用 html + 脚本

    <style type="text/css"> .SomeClass { background-color: yellow } </style>
    <script type="text/javascript">
        function dump(str) {
            $('<div>' + str + '<br/></div>').appendTo('body');
        }
    </script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript" src="jquery.ba-replacetext.js"></script>
    <script type="text/javascript" src="test.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            one();
        });
    </script>

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 2011-02-02
    • 2020-02-22
    • 2012-07-10
    • 2015-05-23
    • 2013-01-08
    • 2019-02-15
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多