如何用texQuery替换textarea中的元素中的文本

时间:2012-11-22 11:28:42

标签: javascript jquery textarea

我有一些带有一些数据的元素。我需要为它创建更改字段。所以我使用textarea来改变这个元素中的文本。一切都很好,但是当我想用文本添加condtion时,某些东西工作正常......这是我的代码和一些小提琴(http://jsfiddle.net/qzzKA/)。求救......

<div class="textchange_box">
    <span class="desc">data<br>data
    </span>
    <textarea name="desc" class="textfield"></textarea>
    <span class="change">change</span>
    <span class="save">save</span>
</div>​ 

和jquery:

$(".change").live('click', function () {
    $(this).prev('.textfield').css('display','block');
    $(this).prevAll('.desc').css('display','none');
    $(this).next('.save').css('display','block');
    $(this).css('display','none');
});
$(".save").live('click', function () {
    var default_value = $(this).prev('.desc').text().replace(/\r\n|\r|\n/g,"<br/>");
    var actual_value = $(this).prev('.textfield').text().replace(/\r\n|\r|\n/g,"<br />");
    $(this).prevAll('.textfield').css('display','none');
    $(this).prev('.change').css('display','block');
    $(this).css('display','none');
    if (actual_value.length < 0) {
        $(this).prev('.desc').replaceWith('<span class="desc">' + default_value +'</span>');
    }
    else if (actual_value.length > 0) {
        $(this).prev('.desc').replaceWith('<span class="desc">' + actual_value +'</span>');
    }
});

1 个答案:

答案 0 :(得分:3)

替换以下行:

if (actual_value.length < 0) {

这个:

if (actual_value.length <= 0) {

因为当字符串为空时,其长度为零而不是负数。

<强>更新
您有其他错误,您的以下两行:

var default_value = $(this).prev('.desc').text().replace(/\r\n|\r|\n/g,"<br/>");
var actual_value = $(this).prev('.textfield').text().replace(/\r\n|\r|\n/g,"<br />");

应该是这样的:

var default_value = $(this).prevAll('.desc').text().replace(/\r\n|\r|\n/g,"<br/>");
var actual_value = $(this).prevAll('.textfield').val().replace(/\r\n|\r|\n/g,"<br />");

因此使用prevAll()代替prev()并使用val()代替text()

此外,您还需要使用prevAll()

$(this).prev('.desc').replaceWith('<span class="desc">' + actual_value +'</span>');

所以它会是:

$(this).prevAll('.desc').replaceWith('<span class="desc">' + actual_value +'</span>');

请参阅working fiddle

基本上最常见的错误是您认为.prev()将遍历所有以前的兄弟姐妹,而为此您必须使用prevAll()