JavaScript NodeList

Переопределите метод SaveChanges в вашем контексте:

public override int SaveChanges()
{
  DateTime saveTime = DateTime.UtcNow;
  foreach (var entry in this.ChangeTracker.Entries().Where(e => e.State == (EntityState) System.Data.EntityState.Added))
   {
     if (entry.Property("CreatedDate").CurrentValue == null)
       entry.Property("CreatedDate").CurrentValue = saveTime;
    }
    return base.SaveChanges();

}

Обновлено из-за комментариев : только для только что добавленных сущностей будет установлена ​​дата.

27
задан kethinov 19 July 2012 в 08:29
поделиться

5 ответов

Похоже, вы можете использовать тот же самый Array.prototype.slice.call, который превращает объект, подобный массиву args, в массив. ( См. Здесь )

var inputs = document.getElementsByTagName('input');
var selects = document.getElementsByTagName('select');

inputs = Array.prototype.slice.call(inputs);
selects = Array.prototype.slice.call(selects);

var res = inputs.concat(selects);

alert(res.length);
46
ответ дан 28 November 2019 в 04:16
поделиться

Вы не можете присоединиться к ним, но вы все еще можно последовательно просматривать их в одном цикле, например так:

for ( var i = 0; i < inputs.length + selects.length; i++ ) {
    var element = ( i < inputs.length ) ? inputs[i] : selects[i-inputs.length];
}

В качестве альтернативы, используя jQuery, вы можете выбрать их все за один раз:

$('input, select')
20
ответ дан 28 November 2019 в 04:16
поделиться

Насколько мне известно, тип NodeList является неизменяемым (см. эту статью , например), что означает, что вам придется сгенерировать свой собственный объект.

Простым методом было бы просто создать массив и скопировать все элементы в этот массив.

var inputs = documentElement.getElementsByTagName('input');
var selects = document.getElementsByTagName('select');
var all = new Array(inputs.length + selects.length);

var index = 0;
for (i = 0; i < inputs.length; i++)
    all[index++] = inputs[i];
for (i = 0; i < selects.length; i++)
    all[index++] = selects[i];

Переменная all затем содержит объединение двух наборов узлов.

4
ответ дан 28 November 2019 в 04:16
поделиться

Во-первых, я подумал, что можно объединить массивы с помощью Array.prototype, например:

Array.prototype.concat.call(selects, inputs);

Но это не работает, поэтому я сделал массивы из коллекций узлов и объедините его. Выглядит это так:

(function () {

    var inputs = document.getElementsByTagName('input'),
        selects = document.getElementsByTagName('select'),
        result,
        i,
        node;

    function convert (collection) {
        var a = [];
        for (var i = 0, length = collection.length; i < length; i++) {
            a.push(collection[i]);
        }
        return a;
    }

    // concatenation && convertation
    result = Array.prototype.concat(convert(inputs), convert(selects));
    // traversing
    i = result.length;
    while(node = result[--i]) {
        alert(node.getAttribute('name'));
    }

})();
0
ответ дан 28 November 2019 в 04:16
поделиться
document.querySelectorAll("input, select"); 
12
ответ дан 28 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: