1

http://jsbin.com/ocotag/1のような html コードを含む文字列があります。この文字列を解析し、いくつかの変更を加えて (たとえば、すべてのリンクをスパンに変更するなど)、変更された html 文字列を取得したいと考えています。

これを開始した jsbin を次に示しますが、動作させることができません: http://jsbin.com/okireb/1/edit

HTML文字列を取得し、jqueryで解析しますが、リンクを置き換えることができず、変更されたHTML文字列を取得できません。

アップデート

なぜ反対票を投じるのですか?この質問の問題点は何ですか?

4

4 に答える 4

1

ループでもできます

dom.each(function(i,v){
  if(v.tagName == "A"){
    dom[i] = $('<span/>').html($(v).html())[0]; // replace it right away with new span element
  }
});

var newString = $('<div>').append(dom.clone()).html(); //<-- to get new string http://stackoverflow.com/a/652771/1385672
console.log(newString);​

編集:

他のタグを保持する方法は次のとおりです

var dom = $(text.split('\n'));  

$(dom).each(function(i,v){ 
  var ele = $(v)[0];      
  if($(ele).is('a')){            
     dom[i] = $('<div>').append($('<span/>').html($(v).html())).html();        
  }
});

var newString = dom.get().join('\n');     

http://jsbin.com/okireb/32/edit

于 2012-12-06T20:03:56.740 に答える
1

これはあなたが望むものであるべきです(改善することができます)

var text = '<!DOCTYPE html><html><head><meta charset=utf-8 /><title>JS Bin</title></head><body><a href="#">Link 1</a><a href="#">Link 2</a><a href="#">Link 3</a></body></html>';
var body_content = text.substring(text.indexOf('<body>') + 6, text.indexOf('</body>'));
var $dom = $('<div/>').html(body_content);
$('a', $dom).each(function() {
    $('<span>' + $(this).html() + '</span>').insertAfter($(this));
    $(this).remove();
});
var text_new = text.replace(body_content, $dom.html());
// text_new contains the entire HTML document with the links changed into spans
于 2012-12-06T21:25:47.013 に答える
1

filter の代わりに find を使用します。

var dom = $('<div>'+text+'</div>');
dom.find('a').each(function() {
  var el = $(this);
  var html = el.html();
  var span = $('<span/>').html(html);
  el.replaceWith(span);
});    
console.log(dom.children()); ​

最初の dom が 1 つの要素ではない場合に備えて、すべてをラップすることに注意してください。

デモンストレーション

HTMLを文字列として戻すには、次を使用します

var html = dom.html();
于 2012-12-06T19:42:09.593 に答える
0

.replace でそれを行うことができます。おそらくそれを行う最も良い方法ではありません。

dom = dom.replace(/<a /g,'<span');
dom = dom.replace(/<\/a>/g,'</span>');

デモ: http://jsbin.com/okireb/14/edit

于 2012-12-06T19:45:21.363 に答える