0

我认为这并不少见,所以我在这里搜索过,但找不到我需要的足够方法。

基本上,我想替换特定元素下的字符串 - pre

  1. 源HTML字符串
  2. 用 div 包裹
  3. 转换(换行)到 jQueryObject
  4. 寻找pre
  5. 获取每个 HTML 字符串pre
  6. 在 HTMLstrings 中从 A 替换到 B
  7. pre用新的 HTML 字符串重构每个
  8. 重构 jQueryObject 或 sourceHTMLstrings

所以,这是我的尝试:

String.prototype.replaceAll = function (org, dest)
    {
        return this.split(org).join(dest);
    };
var wrap = function (data)
    {
        return '<div>' + data + '</div>';
    };

// Data is a string which contains `pre` elements
var $data2 = $(wrap(Data))
                .find('pre') //behavior is confirmed to find several `pre`; so far so good
                .html(this.html().replaceAll(A, B));
                //Uncaught TypeError: Object #<Object> has no method 'html' 

或者

.....

var $data2 = $(wrap(Data))
                .find('pre') //behavior is confirmed to find several `pre`; so far so good
                .html(this.replaceAll(A, B));
                //Uncaught TypeError: Object #<Object> has no method 'replaceAll'

基本上,我无法理解每个对象是如何在方法之间传递的。

我也尝试使用each没有成功的方法。你对此有什么好主意吗?

编辑:

答案是

var $data2 = $("<div/>");

$data2.html(Data).find("pre").html(function(_,h){
        return h.replaceAll(A, B);
});

然后 $data2 .....

$data2 = $("<div/>").html(Data).find("pre").html(function(_,h){
            return h.replaceAll(A, B);

结果只pre收集。不是整个文档范围。

我认为这是通过破坏性价值来展示问题的好或坏的例子。

甚至 jQuery 也是非常实用的范例,这太糟糕了。

4

2 回答 2

0

如果你改变你的功能,它会html起作用

.html(this.replaceAll(A, B));

对此:

.html(function(_,h){
    return h.replaceAll(A, B);
});

作为旁注,您可以使其更简单:

var $data2 = $("<div/>").html(Data).find("pre").html(function(_,h){
        return h.replaceAll(A, B);
});

编辑:

如果要在Data变量中获取条目 HTML,请在更改 HTML 后尝试使用end()。这将重置遍历并将其恢复为<div/>水平。

var $data2 = $("<div/>").html(Data).find("pre").html(function (_, h) {
    return h.replaceAll(A, B);
}).end();

上面的代码将返回div我们创建的。它的内部内容将是其中的pre和其他内容。要获得这些东西,请添加children()after end()。这将把所有的东西都Data转换成 DOM 对象。

var $data2 = $("<div/>").html(Data).find("pre").html(function (_, h) {
    return h.replaceAll(A, B);
}).end().children();

演示:http: //jsfiddle.net/hungerpain/jRjQC/

于 2013-08-03T07:07:31.347 回答
0
var $data2 = $(wrap(Data)).find('pre').html().replaceAll(A, B);
于 2013-08-03T07:53:00.823 回答