0

これはそれほど珍しいことではないと思うので、ここで検索しましたが、必要な適切な方法が見つかりません。

基本的に、特定の要素の下の文字列を置き換えたい - pre

  1. ソースHTML文字列
  2. div でラップする
  3. jQueryObject に変換 (ラップ)
  4. 探すpre
  5. それぞれの HTMLstring を取得するpre
  6. HTMLstrings 内の A から B に置き換えます
  7. pre新しい HTMLstrings でそれぞれをリファクタリングします
  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
var $data2 = $(wrap(Data)).find('pre').html().replaceAll(A, B);
于 2013-08-03T07:53:00.823 に答える
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 を変数で取得したい場合はend()、HTML を変更してから使用してみてください。これにより、トラバーサルがリセットされ、水平に戻り<div/>ます。

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

上記のコードは、div作成した を返します。その内部コンテンツは、その中のpreおよびその他のものになります。それらのものだけを取得するには、children()afterを追加しend()ます。これにより、すべてがDataDOM オブジェクトに変換されます。

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 に答える