【问题标题】:Replace text with {} symbol in Jerry?在 Jerry 中用 {} 符号替换文本?
【发布时间】:2014-02-14 10:43:00
【问题描述】:

我有以下代码:

              <p>
                To
                <br>
            {customerDetails}
              </p>

我尝试了以下但它给出了错误。

    Jerry doc = Jerry.jerry(FileUtil.readString(file));
doc.$("#customerDetails").text(ci.name + "&lt;BR/&gt;" + ci.addr1);

这里将被 {customerDetails} 替换的文本应该是独立的,这就是为什么我不想使用标签的任何帮助。如果我为 {customerDetails} 提供任何标签,“To”将被分发。

我想用一些文本替换“{customerDetails}”,而不需要任何 html 标签或 css 类和 id 的帮助。 有可能吗?

【问题讨论】:

  • 是的,但这是一个非常模糊的问题。页面上是否还有其他 {text} 实例?它必须在一个容器中,您可以通过类或 ID 来识别它,那么它在什么地方呢?你给我们的信息很少。另外,您已经尝试过什么?这不是一个说“写我的代码”的网站
  • 一个该死的昂贵的解决方案jsfiddle.net/arunpjohny/36Yjh/1
  • 请查看问题,已修改。
  • @M.S.Naidu 邮政编码显示您尝试过的内容......
  • 大家好,这不是一个javascript问题。标签错误,我将其删除。详情请看我的回答。

标签: jquery jquery-selectors jodd jodd-lagarto


【解决方案1】:

这将适用于您上面的确切 html...

$("p").html(function(i, html) {
    return html.replace("{customerDetails}", ci.name + "<br />" + ci.addr1);
});

如果页面中还有其他段落标签,那么它也会针对它们运行。正如我在上面评论的那样,我们确实需要更多信息来给你一个好的答案,而不仅仅是一个答案。

jsfiddle example...

【讨论】:

  • @GonçaloVieira 除非有充分的理由,否则没有,而且就目前的问题而言,没有。
  • 这只会进行 1 次替换,因此任何其他 {customerDetails} 都会被忽略。
  • 应该是:return html.replace(/{customerDetails}/ig, "Mr. John Kramer");
  • 是的@Steve - 它只会做 1 次替换,这正是我想要的。如上所述,我没有使用正则表达式,因为问题不需要。
【解决方案2】:

首先,这不是一个javascript问题,而是Java问题。它是关于Jodd Jerry,Java 中的解析库,看起来非常类似于 jQuery。所以这里所有的jsfiddle解决方案都无济于事,我相信这个问题上的一些负分是不行的。

不管怎样,@Archer 解决方案是一个能给你一个好的方向的解决方案。这是相同的java版本:

Jerry doc = Jerry.jerry("<p>to<br>{customerDetails}</p>");

doc.$("p").each(new JerryFunction() {
    public boolean onNode(Jerry $this, int index) {
        String innerHtml = $this.html();
        innerHtml = StringUtil.replace(
            innerHtml, "{customerDetails}", "Jodd <b>rocks</b>");
        $this.html(innerHtml);
        return true;
    }
});

String newHtml = doc.html();
assertEquals("<p>to<br>Jodd <b>rocks</b></p>", newHtml);

Jerry 仍然没有实现 html(function) 类型的方法(它在 todo 上),所以你必须明确使用 each

请注意,您不能搜索 #customerDetails,因为您没有任何具有此 ID 的 DOM 元素。你可以做的是有一个空的占位符 divspan 像这样:

<p>to<br><span id="#custdet">{customerDetails}</span></p>

然后你就可以做你在问题中写的事情了。

无论如何,如果可能的话,我会尝试以不同的方式解决这个问题。如果你已经有了标记和 HTML 内容,可以不解析就直接替换吗?

【讨论】:

  • 首先我要感谢您澄清所有用户。我得到了如下查询的解决方案,如果这种方法不好,请告诉我。杰瑞文档 = Jerry.jerry(FileUtil.readString(file));字符串替换 = doc.$("body, p").html().replace("{customerDetails}", "" + ci.name + "" + "
    " + ci.addr1); doc.$("body, p").html(replaced);字符串处理Html = doc.html();
  • 这可以工作(在 CSS 查询中删除逗号),但它可以更优化:1)您正在使用使用正则表达式的 replace - 改为使用 StringUtil.replace(); 2)不要查找两次,将doc.$("body p")分配给一个变量并重用它。
  • 好的,我会这样做,根据你对每个“p”标签的回答,它会被替换吗?
  • 我的 html 中只有一个 {customerDetails},是否可以循环遍历 html 文件中的所有 'p'。
  • 没有。其实根本不解析html,替换token就行了;)
猜你喜欢
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多