Вы можете сделать несколько вещей для повышения производительности:
$.each()
и каждая функция, которую вы добавляете в DOM. Но это незначительная корректировка. $('<tr></tr>')
. Но старайтесь избегать сохранения значения. Размер DOM будет огромным, но он должен работать на модерирующих браузерах и забыть об IE6.
@ fuel37: Пример
function outputDocumentNew(data, doc_id) {
//Variable DOM's
var rowSample = $('<tr></tr>').addClass('row-class');
var colSample = $('<td></td>').addClass('col-class');
var spanSample = $('<span></span>').addClass('span-class');
var inputButtonSample = $('<input type="button"/>').addClass('input-class');
//DOM Container
var container = $('#documentRows');
container.empty().append('<table></table>');
//Static part
var head = '<thead>\
<tr>\
<th width="1%" align="center">ID</th>\
<th width="1%" align="center">Status</th>\
<th width="70%">Name</th>\
<th width="2%">Actions</th>\
<th width="1%">Origin</th>\
</tr>\
</thead>';
container.append(head);
var body = $('<tbody></tbody>');
container.append(body);
//Dynamic part
$.each(data, function (index, value) {
var _this = this;
//DOM Manupulation
var row = rowSample.clone();
//Actions
var inpFailOne = inputButtonSample.clone().val('F').attr('rev', _this.id).addClass('failOne').click(function (e) {
//do something when click the button.
});
var inpPromoteOne = inputButtonSample.clone().val('P').attr('rev', _this.id).addClass('promoteOne').click(function (e) {
//do something when click the button.
});
row
.append(colSample.clone().append(_this.id))
.append(colSample.clone().append(spanSample.colne().addClass('status').append(_this.status)))
.append(colSample.clone().append(spanSample.colne().addClass('name').append(_this.name)))
.append(colSample.clone().append(inpFailOne).append(inpPromoteOne))
.append(colSample.clone().append(_this.origin));
body.append(row);
});
}
в этом процессе вам необходимо создать & amp; поддерживать id или классы для манипуляций. У вас есть элемент управления для привязки событий и управления ими.
Используйте регулярное выражение непотребления.
типичное (т.е. Perl/Java) нотация:
(?=
expr)
Это означает "соответствие expr, но после этого продолжите соответствовать в исходном матч-пойнте".
можно сделать столько из них, сколько Вы хотите, и это будет "и". Пример:
(?=match this expression)(?=match this too)(?=oh, and this)
можно даже добавить группы получения в выражениях непотребления, если необходимо сохранить некоторые данные там.
Необходимо использовать предвидение, как некоторые из других респондентов сказали, но предвидение должно составлять другие символы между своим выходным словом и текущим положением соответствия. Например:
(?=.*word1)(?=.*word2)(?=.*word3)
.*
в первом предвидении позволяет ему соответствовать однако многим символам, в которых требуется к тому, прежде чем это доберется до "word1". Тогда положение соответствия сбрасывается, и второе предвидение ищет "word2". Сброс снова и заключительная часть соответствуют "word3"; так как это - последнее слово, на которое Вы проверяете, не необходимо, чтобы это было в предвидении, но это не причиняет боль.
для соответствия целому абзацу, необходимо привязать regex в обоих концах и добавить финал .*
для потребления оставшихся символов. Используя нотацию стиля Perl, которая была бы:
/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m
'm' модификатор для multline режима; это позволяет ^
, и $
соответствие на границах абзаца ("границы строки" в regex-говорят). Важно в этом случае, чтобы Вы не использовали' модификатор, который позволяет точечному метасимволу соответствовать новым строкам, а также всем другим символам.
Наконец, Вы хотите удостовериться, что Вы распознаете целые слова и не только фрагменты более длительных слов, таким образом, необходимо добавить границы слова:
/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m
Можно сделать это с регулярным выражением, но вероятно Вы еще захотите некоторым. Например, используйте несколько regexp и объедините их в выражении if.
можно перечислить все возможные перестановки со стандартом regexp, как это (соответствует a, b и c в любом порядке):
(abc)|(bca)|(acb)|(bac)|(cab)|(cba)
Однако это делает очень длинное и вероятно неэффективный regexp, если у Вас есть больше, чем условия пары.
, Если Вы используете, некоторые расширили regexp версию, как Perl или Java, у них есть лучшие способы сделать это. Другие ответы предложили использовать положительную предварительную операцию.
Не возможно в Вашем случае сделать И на нескольких результатах соответствия? в псевдокоде
regexp_match(pattern1, data) && regexp_match(pattern2, data) && ...
При использовании регулярных выражений Perl можно использовать положительное предвидение:
, Например
(?=[1-9][0-9]{2})[0-9]*[05]\b
были бы числа, больше, чем 100 и делимый 5
Порядок всегда подразумевается в структуре регулярного выражения. Для выполнения, что Вы хотите необходимо будет соответствовать входной строке многократно против различных выражений.
то, Что Вы хотите сделать, не возможно с единственным regexp.
Number
кNumber
. – Drew Noakes 5 June 2010 в 06:51