テキスト内の行を別々のスパンで折り返す必要があります。
必要なことを(ほぼ)正確に行う答えを見つけました...
$.fn.wrapLines = function (options) {
var options = $.extend({
lineWrap: 'span',
lineClassPrefix: 'wrapliner wrap_line_',
wordClassPrefix: 'w_line_',
index: 0,
offsetTop: 0,
offsetLeft: 0
}, options);
return this.each(function () {
options.index = 0;
options.offset = 0;
var parentElm = $(this);
var elmText = $(parentElm).text();
$(parentElm).html(function (ind, htm) {
var $repText = '<' + options.lineWrap + '>' + elmText.replace(/\s+/g, ' </' + options.lineWrap + '> <' + options.lineWrap + '>');
$repText = $repText + '</' + options.lineWrap + '>';
return $repText;
});
$(options.lineWrap, parentElm).each(function () {
var spanOffset = $(this).offset();
if (spanOffset.top > options.offsetTop) {
options.offsetTop = spanOffset.top;
options.index++;
}
$(this).addClass(options.wordClassPrefix + options.index);
});
if ($.browser.msie && ($.browser.version == 7 || $.browser.version == 8)) {
for (var x = 1; x <= options.index; x++) {
var $spans = $('.' + options.wordClassPrefix + x);
$spans
.eq($spans.length - 1)
.removeClass(options.wordClassPrefix + x)
.addClass(options.wordClassPrefix + (x + 1))
}
}
for (var x = 1; x <= options.index; x++) {
$('.' + options.wordClassPrefix + x, parentElm)
.wrapAll('<' + options.lineWrap + ' class="' + options.lineClassPrefix + x + '" />')
.append("");
var innerText = $('.' + options.lineClassPrefix + x, parentElm).text();
$('.' + options.lineClassPrefix + x, parentElm).html(function () {
return innerText;
});
}
});
};
それでも、タグを保持したい。
.text
toを変更し.html
て正規表現を調整してみましたが、答えが見つからないようです。...私は正規表現の専門家ではありません
多分誰かがこれで私を助けることができます。
これは、テキストのみを取得する現在の実装のフィドルです。
これはタグを保持するフィドルですが、タグの前のテキストを正しくラップしません
これが私が見つけた別の例です。単語は完全に折り返されますが、行は折り返されません