jQuery Очистить или лучше [закрыт]

0

У меня есть этот длинный сценарий ниже, который я знаю, можно писать лучше. У нас есть сайт, который очень тяжелый JS, мне нужно изменить элементы с помощью JS, и это то, что у меня есть. Но я знаю, что это может сделать ставку иначе, чтобы быть более эффективным. Я не очень хорошо разбираюсь в JS, поэтому он написан на этом более длинном пути.

Любая помощь будет замечательной!

        <script type="text/javascript">
           jQuery(document).ready(function() {
           var html = $("#tab7 a").html().split(" ");
           html = html[0] + "<br>" + html.slice(1).join(" ");
           jQuery("#tab7 a").html(html);
           jQuery("#tab7 a").css({"line-height" : "16px","text-align" : "center","padding-top" : "29px","height" : "49px"});
        });
        </script>
        <script type="text/javascript">
           jQuery(document).ready(function() {
           var html = $("#tab9 a").html().split(" ");
           html = html[0] + "<br>" + html.slice(1).join(" ");
           jQuery("#tab9 a").html(html);
           jQuery("#tab9 a").css({"line-height" : "16px","text-align" : "center","padding-top" : "29px","height" : "49px"});
        });
        </script>

        <script type="text/javascript">
           jQuery(document).ready(function() {
           var html = $("#tab10 a").html().split(" ");
           html = html[0] + "<br>" + html.slice(1).join(" ");
           jQuery("#tab10 a").html(html);
           jQuery("#tab10 a").css({"line-height" : "16px","text-align" : "center","padding-top" : "29px","height" : "49px"});
        });
        </script>
  • 0
    Почему они в отдельных тегах сценария?
  • 0
    Ну, это не будет более эффективным с точки зрения производительности, но это будет более эффективным с точки зрения обслуживания.
Показать ещё 1 комментарий
Теги:

4 ответа

1
Лучший ответ

Кстати, вы не должны разделяться на разные блоки скриптов.

<script>
jQuery(document).ready(function(){
  var tabs = ["tab7", "tab9", "tab10"];
  jQuery.each(tabs, function(index, value){
    var el = $("#"+value+" a");
    var html = el.html().split(" ");
    html = html[0] + "<br>" + html.slice(1).join(" ");
    el.html(html);
    el.css({"line-height" : "16px","text-align" : "center","padding-top" : "29px","height" : "49px"});
  });
});
</script>
1

Не переписывая сценарий полностью, вот несколько советов:

  1. Поместите JS в отдельный JS файл.
  2. Вам не нужно выделять JS с несколькими блоками <script>, и вам не нужно несколько функций готовности.
  3. В терминах согласованности используйте jQuery или $, а не оба
  4. Поскольку код реплицируется, используйте цикл и замените соответствующие значения.

Он будет выглядеть примерно так в отдельном файле.js (минус цикл):

$(function () {
    var html = $("#tab7 a").html().split(" ");
    html = html[0] + "<br>" + html.slice(1).join(" ");
    $("#tab7 a").html(html);
    $("#tab7 a").css({
        "line-height": "16px",
            "text-align": "center",
            "padding-top": "29px",
            "height": "49px"
    });

    html = $("#tab9 a").html().split(" ");
    html = html[0] + "<br>" + html.slice(1).join(" ");
    $("#tab9 a").html(html);
    $("#tab9 a").css({
        "line-height": "16px",
            "text-align": "center",
            "padding-top": "29px",
            "height": "49px"
    });

    html = $("#tab10 a").html().split(" ");
    html = html[0] + "<br>" + html.slice(1).join(" ");
    $("#tab10 a").html(html);
    $("#tab10 a").css({
        "line-height": "16px",
            "text-align": "center",
            "padding-top": "29px",
            "height": "49px"
    });
});
1

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

    jQuery(document).ready(function() {
       $(".tab a").each(function() {
           var html = $(this).html().split(" ");
           html = html[0] + "<br>" + html.slice(1).join(" ");
           $(this).html(html);
       });
    });

И тогда вы бы применили следующий CSS к странице:

<style type="text/css">
.tab a {
    line-height:16px;
    text-align:center;
    padding-top:29px;
    height:49px;
}
</style>

Таким образом, каждый элемент <a> с элементом с class='tab' будет иметь один и тот же стиль, а код jQuery будет значительно сокращен, так как jQuery автоматически найдет каждый элемент, который соответствует параметру, и будет проходить через них с использованием метода .each и примените изменения.

  • 1
    Почему бы не общий класс, а не цикл for, чтобы вас не волновало значение start / stop?
  • 0
    Это очень хороший момент, я добавлю в пример для этого.
0

Я бы добавил класс к элементам и .each каждый из них методом .each. Он выполняет итерацию через каждый элемент массива, возвращаемый селектором .className.

 $(function() {
    $(".tab-link").each(function(){
       var html = $(this).html.split(" ");
       html = html[0] + "<br/>" + html.slice(1).join(" ");
       $(this).html(html);
       $(this).css({"line-height" : "16px","text-align" : "center","padding-top" : "29px","height" : "49px"});
    });
 });

JQuery Doc

Ещё вопросы

Сообщество Overcoder
Наверх
Меню