2011-12-23 4 views
-2

Хорошо, что я не использовал jquery, поэтому, пожалуйста, будьте спокойны.Помогите мне улучшить мой код

$("#div").find(".list").each(function(){ 
    var $listContent = $(this).closest(".listContent"); 
    var $like = $details.find(".like").html(); 
    var $dislike = $details.find(".dislike").html(); 
    alert($like.replace("<br>","")); 
}) 

Как я могу улучшить этот код. Вместо того, чтобы предупреждать значения, я передаю их методу. Я хочу удалить теги BR, но по какой-то причине он удаляет фактический тег br из элемента, поэтому я использую метод replace.

+0

Что значит, удаляет фактическую метку br? Вы вызывали .delete() или что-то вроде $ like? –

+0

Да, жаль, что я присваивал следующие значения переменной «var x = $ ('br', $ like) .remove()' –

+0

Не удивительно. Вы будете работать над фактическим деревом DOM. Вам нужно будет клонировать результаты поиска() и удалять
, если вы хотите сохранить исходное дерево. –

ответ

1

Для вашего кода как указано, объект $details не определен, а $listContent не используется вообще. Если $details установлен перед циклом each, то значения, полученные через $details.find(), и полученные значения в и dislike будут одинаковыми на каждой итерации, поэтому вы должны установить эти переменные перед циклом. Но возможно, это потому, что вы вырезали часть своего реального кода, чтобы сделать вопрос короче? Я предполагаю, что это так и оставить эту часть как есть.

Итак, предполагая свое намерение, чтобы получить элемент HTML в виде строки и удалите "<br>" из строки перед передачей его в какой-то другой функции, то, что вы уже делаете работает нормально. Вы можете привести в порядок его немного:

$("#div").find(".list").each(function(){ 
    var $listContent = $(this).closest(".listContent"), 
     like = $details.find(".like").html().replace(/<br>/gi,""), 
     dislike = $details.find(".dislike").html().replace(/<br>/gi,""); 
    yourOtherMethod(like, dislike); 
}); 

Вы увидите, что я использовал только один var заявление, с отдельными объявлениями переменных, разделенных запятыми. И по соглашению имя переменной, начинающееся со знака доллара, обычно указывает, что переменная ссылается на объект jQuery, поэтому я удалил знаки доллара с like и dislike, так как они содержат строки (это будет работать в любом случае, вы понимаете, но в соответствии с конвенцией делает ваш код более четким).

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

1

Помимо этого, в любом случае, я могу привести в порядок код выше?

Незначительные нит: Использование Имя_переменный символа доллара обычно означает, что переменный является объектом JQuery.

Итак:

var $like = $details.find(".like").html(); 

Должно быть:

var like = $details.find(".like").html(); 

Поскольку HTML() возвращает строку, а не объект JQuery.

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