My job required me to learn jQuery the last couple of weeks, but it's a mess and I do not know how to structure my code in an acceptable manner. I come from a Java and PHP background and have never touched JavaScript before.
I've searched the web for some guidelines, but I could not find anything of real value.
function answer(id, value) {
$("input#" + id).val(value);
}
$("table.grid").ready(function() {
if ($.browser.msie && $.browser.version == "7.0") {
var z = 1000;
$("table, tr, th, td, div").each(function() {
$(this).css("z-index", z);
z -= 10;
});
}
$("td[rowspan=2]").parent().addClass("no-border");
$("td.answer-head").prevAll("td.radio").each(function(index) {
$(this).addClass("answer-tail");
});
$("td.radio").click(function() {
var $that = $(this);
var $left = $that.prevAll("td.radio").andSelf();
var $right = $that.nextAll("td.radio");
var $parent = $that.parent();
var $cousin = null;
if ($parent.children().first().attr("rowspan") != undefined) {
$cousin = $parent.next("tr").children("td.radio").eq($left.length - 1);
} else if ($parent.prev("tr").children().first().attr("rowspan") != undefined) {
$cousin = $parent.prev("tr").children("td.radio").eq($left.length - 1);
}
if ($cousin !== null) {
$left = $left.add($cousin).add($cousin.prevAll("td.radio"));
$right = $right.add($cousin.nextAll("td.radio"));
}
$left.each(function(index) {
var $that = $(this);
if ($that.hasClass("answer-head")) {
$that.addClass("click-head");
} else if ($that.hasClass("answer-tail")) {
$that.addClass("click-tail");
} else {
$that.addClass("click");
}
});
$right.each(function(index) {
$(this).removeClass("click-head").removeClass("click-tail").removeClass("click");
});
}).hover(function() {
var $that = $(this);
var $left = $that.prevAll("td.radio").andSelf();
var $right = $that.nextAll("td.radio");
var $parent = $that.parent();
var $cousin = null;
if ($parent.children().first().attr("rowspan") != undefined) {
$cousin = $parent.next("tr").children("td.radio").eq($left.length - 1);
} else if ($parent.prev("tr").children().first().attr("rowspan") != undefined) {
$cousin = $parent.prev("tr").children("td.radio").eq($left.length - 1);
}
if ($cousin !== null) {
$left = $left.add($cousin).add($cousin.prevAll("td.radio"));
$right = $right.add($cousin.nextAll("td.radio"));
}
var $help = $that.add($cousin).find("div.help").first();
$help.css("display", "inline-block");
$left.each(function(index) {
$that = $(this);
if ($that.hasClass("answer-head")) {
$that.addClass("hover-head");
} else if ($that.hasClass("answer-tail")) {
$that.addClass("hover-tail");
} else {
$that.addClass("hover");
}
});
}, function() {
var $that = $(this);
var $all = $that.siblings("td.radio").andSelf();
var $parent = $that.parent();
if ($parent.children().first().attr("rowspan") != undefined) {
$all = $all.add($parent.next("tr").children("td.radio"));
} else if ($parent.prev("tr").children().first().attr("rowspan") != undefined) {
$all = $all.add($parent.prev("tr").children("td.radio"));
}
$all.find("div.help").css("display", "none");
$all.each(function(index) {
$(this).removeClass("hover-head").removeClass("hover-tail").removeClass("hover");
});
});
});
Above are my hundred lines of code. The script does exactly what I want to do, but it does look ugly, doesn't it? Could you provide a guide/tutorial on how to structure this mess up or give me some pointers?