Возможно ли выполнить ".value + =" в JQuery?

Классический javascript:

var myvar = document.getElementById("abc");
abc.value += "test";
abc.value += "another test";

Jquery:

$("#abc").val($("#abc").val()+"test");
$("#abc").val($("#abc").val()+"another test");

Есть ли способ сделать мой JQuery более красивым, возможно, со скрытой функцией + =, которую я мог бы использовать? Я знаю, что .val() не является атрибутом, но я чувствую, что должен быть способ сделать этот код более красивым, чтобы посмотреть...

Что-то вроде этого было бы здорово:

 $("#abc").valueAttribute += "test"
 $("#abc").val().content += "test"
 $("#abc").val().add("test")

Ответ 1

Так как jQuery 1.4, можно передать функцию .val(), которая получает текущее значение как второй аргумент:

$("#abc").val(function(i, val) {
    return val + "test";
});

Ответ 2

Вы можете вернуться к исходному элементу DOM.

 $("#abc").get(0).value += "test";

В противном случае вам придется написать плагин

 $.fn.appendVal = function (newPart) {
   return this.each(function(){ $(this).val( $(this).val() + newPart); });
 };

 $("#abc").appendVal("test");

Ответ 3

Я никогда не сталкивался с чем-либо подобным, не означает, что он не существует, хотя.

Я обычно просто храню val() во временной переменной и делаю манипуляции на этом, а затем вызываю val (temp) в отдельной строке. Он распространяет операцию на три или более строк, но она более читаема, чем .val(.val() + ""), IMO. Он также масштабируется лучше, чем + =, если у вас есть более сложное выражение для значения.

var temp = $(".abc").val();
temp += "test";
$(".abc").val(temp);

Ответ 4

$() возвращает выбор; он не возвращает фактический результирующий объект (хотя на практике он просто возвращает список фактических объектов). Если вы хотите изменить свойство объекта .value, вы можете сделать это:

$('.abc').each(function(){ this.value += foo; });

Если вам нравится, вы можете создавать функции, которые работают с выборами, например .add(), которые могут быть реализованы следующим образом:

jQuery.fn.extend({ add: function(k,v) { this[k](this[k]()+v); } });

который затем можно использовать следующим образом:

$('.abc').add('val', foo);

... но я не думаю, что это лучше, чем использование $().each()

Ответ 5

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">

    (function($){
        $.fn.valInc = function(vadd)
        {
            var val = $(this).val() + '' + vadd;
            $(this).val(val);
        }
    })(jQuery);

    $(function(){
        $("#tst").valInc('test 2');
    });

</script>
</head>
<body>
<input id='tst' value="test" />
</body>
</html>