Первый метод намного более гибок по стоимости, которую Вы упоминаете.
И второй подход никогда не жизнеспособно, когда Вы показали. Вместо этого Вы сделали бы (согласно Вашему первому примеру)
create table item_config (item_id int, colour varchar, size varchar, fabric varchar)
, конечно, это будет только работать, когда объем данных будет известен и не изменяется много.
Как правило любому приложению, которое требует изменяющийся DDL таблиц, чтобы сделать нормальную работу, нужно дать секунду и третьи мысли.
С помощью этого HTML:
<ul>
<li>Mario</li>
<li>Luigi</li>
<li>Princess</li>
<li>Toad</li>
</ul>
И этого JavaScript:
alert($("ul li").eq(0).text()); // Mario
alert($("ul li").eq(1).text()); // Luigi
alert($("ul li").eq(2).text()); // Princess
alert($("ul li").eq(3).text()); // Toad
.eq (i)
возвращает элемент из коллекции по указанному индексу i
.
В примере из опубликованной вами ссылки:
$ ("p"). eq (1) .css ("color", "red")
В основном это говорит: "Найдите все элементы, которые соответствуют $ (" p "), затем возьмите второй и измените его цвет на красный. "
$ (" p ")
соответствует всем
элементам в вашем документе. Теперь у вас есть их коллекция.
$ ("p"). Eq (1)
сокращает эту коллекцию только до 2-го элемента.
the .css ("color", "red ")
часть просто воздействует на этот элемент, чтобы изменить его цвет на красный.
Чтобы понять, как работает eq ()
, я думаю, это поможет понять, как $ ()
работает в jQuery. Когда вы указываете
$([selector],[context])
//which is the same as
$([context]).find([selector])
, возвращается объект jQuery (иногда называемый обернутым набором ), который, помимо других свойств, имеет свойство, начинающееся с 0
и увеличивается на 1 для каждого элемента, соответствующего селектору. Также установлено свойство length
, поэтому совпадающие элементы объекта jQuery можно перебирать как массив (с помощью цикла for или таких команд, как each ([callback])
).
Давайте теперь посмотрим на источник для eq ()
eq: function( i ) {
return this.slice( i, +i + 1 );
},
, мы увидим, что eq ()
достигается с помощью команды slice ()
объекта jQuery, поэтому позвольте ' s также взгляните на этот
slice: function() {
return this.pushStack( Array.prototype.slice.apply( this, arguments ),
"slice", Array.prototype.slice.call(arguments).join(",") );
},
, а также на pushStack ()
, команду, довольно немного используемую внутри
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery( elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" )
ret.selector = this.selector + (this.selector ? " " : "") + selector;
else if ( name )
ret.selector = this.selector + "." + name + "(" + selector + ")";
// Return the newly-formed element set
return ret;
},
, мы видим, что pushStack
принимает массив и возвращает новый объект jQuery. Элементы, которые образуют совпадающие элементы нового объекта jQuery, получаются путем вызова Function.apply
в функции JavaScript Array slice
и передачи аргументов
jQuery. slice в качестве argsArray
.
Команда get ()
, с другой стороны, более проста. Давайте посмотрим на источник
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num === undefined ?
// Return a 'clean' array
Array.prototype.slice.call( this ) :
// Return just the object
this[ num ];
}
, вызываемый без аргумента для параметра num
, объект jQuery преобразуется в массив с использованием Function.call
в массиве JavaScript ] slice
функция. Если число
определено, тогда возвращается значение, содержащееся в соответствующем свойстве объекта jQuery, почти такое же, как в следующем
$([selector]).get(0)
//is the same as
$([selector])[0]
посмотрите пример из документации:
$("p").eq(1).css("color", "red")
$("p") selects all paragraphs in your document
.eq(1) selects the second element only
.css("color", "red") applies css rule to the selected element
Похоже, вы зациклились на слове «индекс».
В этом случае «индекс» относится к определенному элементу в коллекции элементов. Таким образом, eq предоставит вам доступ к одному элементу в согласованном наборе элементов.