Ответ 1
Так как jQuery 1.4, можно передать функцию .val()
, которая получает текущее значение как второй аргумент:
$("#abc").val(function(i, val) {
return val + "test";
});
Классический 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")
Так как jQuery 1.4, можно передать функцию .val()
, которая получает текущее значение как второй аргумент:
$("#abc").val(function(i, val) {
return val + "test";
});
Вы можете вернуться к исходному элементу DOM.
$("#abc").get(0).value += "test";
В противном случае вам придется написать плагин
$.fn.appendVal = function (newPart) {
return this.each(function(){ $(this).val( $(this).val() + newPart); });
};
$("#abc").appendVal("test");
Я никогда не сталкивался с чем-либо подобным, не означает, что он не существует, хотя.
Я обычно просто храню val() во временной переменной и делаю манипуляции на этом, а затем вызываю val (temp) в отдельной строке. Он распространяет операцию на три или более строк, но она более читаема, чем .val(.val() + "")
, IMO. Он также масштабируется лучше, чем + =, если у вас есть более сложное выражение для значения.
var temp = $(".abc").val();
temp += "test";
$(".abc").val(temp);
$()
возвращает выбор; он не возвращает фактический результирующий объект (хотя на практике он просто возвращает список фактических объектов). Если вы хотите изменить свойство объекта .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()
<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>