У меня есть этот длинный сценарий ниже, который я знаю, можно писать лучше. У нас есть сайт, который очень тяжелый 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>
Кстати, вы не должны разделяться на разные блоки скриптов.
<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>
Не переписывая сценарий полностью, вот несколько советов:
<script>
, и вам не нужно несколько функций готовности.Он будет выглядеть примерно так в отдельном файле.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"
});
});
Было бы намного лучше сократить это до одного обработчика, используя общий класс для всех ваших предметов
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
и примените изменения.
Я бы добавил класс к элементам и .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"});
});
});