Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Агрегаты в jQuery
 
 автор: Sfinks   (12.09.2012 в 17:30)   письмо автору
 
 

Скажите, я чего-то в упор не вижу, или в jQuery на самом деле не встроили агрегатных функций?
Например так:
$.sum( $('input').val() );
или
$.max( $('div').text() );
???

  Ответить  
 
 автор: confirm   (12.09.2012 в 17:35)   письмо автору
 
   для: Sfinks   (12.09.2012 в 17:30)
 

jQuery все-таки не MySQL, а функции MySQL не обязательно должны быть среди методов JS.
Но в jQuery вы можете добавить не только собственный селектор, но и метод, и пользоваться.

  Ответить  
 
 автор: Sfinks   (12.09.2012 в 18:35)   письмо автору
 
   для: confirm   (12.09.2012 в 17:35)
 

Это все понятно.
Просто я удивился. Очень!
Это вроде нужная вещь. По крайней мере я сейчас только начал первый раз что-то реальное делать с использованием jQuery и JS в целом, и тут же понадобилось.
А самое странное, что там кода-то нет ниче. И можно было бы встроить....
А так теперь придется каждый раз подключать лишний файл.

  Ответить  
 
 автор: confirm   (12.09.2012 в 21:45)   письмо автору
 
   для: Sfinks   (12.09.2012 в 18:35)
 

Чему удивляться то? Разве MySQL обладает функциями, которые выполняют любую вашу прихоть? )
В JS даже нельзя получить максимальное значение элементов массива так, как вы это привыкли делать в РНР max(array), JS на такое Math.max(array) вернет строку значений массива. Это конечно не совсем хорошо, но не означает, что нельзя получить.
А в jQuery вы тем более "вольно" чувствуя себя, обращаетесь к объектам, выдвигая ряд условий, и еще получить конкретное значение.
.each() вполне решит вашу проблему, так как вас в итоге интересует значение. Другое дело, если вас интересует не само значение как таковое, а условие макс./мин., чтобы по этому условию выбрать объект, что собственно и является "главной заботой" jQuery - возвращать вам объект/объекты по вашим условиям. Вот в этом случае можно написать и свой метод/селектор, если действительно в этом есть необходимость. При этом кто вам сказал, что для этого потребуется подключать лишнее, да еще целый файл?
<script>
//пишем метод, который будет возвращать объект
//у которого значение минимальное или максимальное
//задается аргументом метода как 'min' or 'max'
$.fn.extremeVal = function() {
    var n = 0, o, ext = arguments[0];
    $(this).each(function(){
        if(ext=='max' && $(this).val()*1>n
           || (ext=='min' && (!n || $(this).val()*1<n))) {
           n = $(this).val()*1;  
           o = $(this);
        }
    });
    return o;
}
//используем метод
$(function(){
   $('input').keyup(function(){
      $(this).val($(this).val()*1+$('input').extremeVal('max').val()*1);
   }); 
});
</script>
<input value="6" />
<input value="21" />
<input value="112" />
<input value="14" />
Кстати, агрегаты..., ну, для JS, это понятие такое же как и для слесаря - агрегат какого либо механизма, значится. )

  Ответить  
 
 автор: Sfinks   (13.09.2012 в 01:19)   письмо автору
 
   для: confirm   (12.09.2012 в 21:45)
 

> .each() вполне решит вашу проблему
Проблемы в общем-то нет =) Я просто усомнился в том что такие простые вещи отсутствуют. Есть же trim.

> При этом кто вам сказал, что для этого потребуется подключать лишнее, да еще целый файл?
А когда в проекте около 50 форм с разной логикой и назначением, каждая из которых будет управляться своим скриптом, думаете я этот код буду в каждый скрипт втыкать?

Кстати, а есть в JS внутреннее подключение скриптов, типа include в php?

  Ответить  
 
 автор: confirm   (13.09.2012 в 07:01)   письмо автору
 
   для: Sfinks   (13.09.2012 в 01:19)
 

Ну в общем то и trim в jQuery вырезает только пробелы, не затрагивая переносы строк. А что касается 50-ти форм, то вы же под каждую из них не подключаете свой JS, так какие проблемы с маленькой функцией? А у формы нет логики, есть только поля, а обработать в примере выше поля только типа text и только указанной формы проблем нет, для этого в jQuery уже есть фильтры/селекторы.

Ни один язык программирования не обладает всем, которое бы делало за вас все, достаточно было бы только написать - "сотвори", вы же это прекрасно знаете. JS не исключение, и скрипты вашего проекта неизбежно будут обрастать функциями вашими.

Как в РНР подключения в JS нет, а включить в тело документа файл скрипта вы знаете как. А вот подключить внутри сценария внешний сценарий операция несколько трудоемкая, чем include, но выполнимая. В jQuery, среди ajax методов есть метод .getScript(), который получает удаленный скрипт и выполняет его.

  Ответить  
 
 автор: cheops   (13.09.2012 в 07:44)   письмо автору
 
   для: Sfinks   (12.09.2012 в 17:30)
 

Модель декларативного языка другая, в SQL например, нет замыкания, а в JavaScript - есть. Если вводить агрегатные функции, получится дублирование функциональности (как сплошь и рядом в PHP), а это плохо, так как одну и ту же задачу можно будет решить большим количеством способов (как в Perl), что породит множество решений. Другим программистам потребуется каждый раз разбирать код, вместо того, чтобы один раз глянуть и понять, что именно тут запрограммировано.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования