2010-12-02 8 views
3

Я хочу создать excel как утилиту в HTML. Предположим, что у меня есть таблица [id "myTbl"] с 20 строками & 20 столбцов. Я хотел бы добавить текстовое поле внутри td, когда пользователи нажимают на него с текстом td в качестве значения.Переключить событие click to td vs table

Пусть мой стол
alt text

Я 2 варианта для достижения этого [как работают отлично]

Вариант I

$("#myTbl").bind("click",function(e){ 
    var obj = e.target; 
    if(obj.nodeName == "TD"){ 
     $(obj).html("<input type='text' value='"+$(obj).html()+"'></input>"); 
    } 
}); 

Вариант II

$("#myTbl tr td").bind("click",function(e){ 
    if($("input",$(this)).length==0){ 
     $(this).html("<input type='text' value='"+$(this).html()+"'></input>"); 
    } 
}); 

Мой вопрос: ch лучше с точки зрения производительности.

+1

Почему не спрятав текстовое поле во всех клетках заранее, то показать/скрыть это от мыши и размытие? – 2010-12-02 07:51:51

+0

Но это увеличит размер моей страницы. Также не обязательно, чтобы пользователь нажимал на каждый тд. Правильно? – 2010-12-02 08:53:13

ответ

3

Первый из ваших двух вариантов создаст только один обработчик событий, поэтому он будет более результативным. Получение цели через событие, как и вы, имеет незначительную стоимость.

Чтобы сделать это путем «JQuery», вы можете использовать delegate:

$("#myTbl").delegate("td", "click", function() { 
    var $this = $(this); 
    $this.html("<input type='text' value='"+$this.text()+"'></input>"); 
}); 
1

Я бы сказал, что привязка его к таблице намного лучше, потому что у вас нет дополнительных накладных расходов на поддержание всех обработчиков кликов для каждой ячейки.

Смежные вопросы