我认为这并不罕见,所以我在这里搜索过,但找不到我需要的适当方法。
基本上,我想替换特定元素下的字符串 - pre
。
pre
pre
pre
所以,这是我的尝试:
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也是功能范例,这太糟糕了。
答案 0 :(得分: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
变量中获取entrie HTML,请在更改HTML后尝试使用end()
。这将重置遍历并将其恢复为<div/>
级别。
var $data2 = $("<div/>").html(Data).find("pre").html(function (_, h) {
return h.replaceAll(A, B);
}).end();
上面的代码将返回我们创建的div
。它的内在内容将是pre
和其他内容。要获得这些内容,请在children()
之后添加end()
。这将把Data
中的所有内容转换为DOM对象。
var $data2 = $("<div/>").html(Data).find("pre").html(function (_, h) {
return h.replaceAll(A, B);
}).end().children();
答案 1 :(得分:0)
var $data2 = $(wrap(Data)).find('pre').html().replaceAll(A, B);