Можно ли сделать ".value + =" в JQuery? - PullRequest
18 голосов
/ 03 августа 2009

Классический 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")

Ответы [ 5 ]

24 голосов
/ 03 августа 2009

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

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

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

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

 $("#abc").appendVal("test");
13 голосов
/ 19 марта 2011

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

$("#abc").val(function(i, val) {
    return val + "test";
});
2 голосов
/ 03 августа 2009

$() возвращает выбор; он не возвращает фактический результирующий объект (хотя на практике он просто возвращает список реальных объектов). Если вы хотите изменить свойство .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()

2 голосов
/ 03 августа 2009

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

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

var temp = $(".abc").val();
temp += "test";
$(".abc").val(temp);
0 голосов
/ 03 августа 2009
<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...