I've refactored your code and added comments to explain certain things.
var expandAll, colapseAll;
$(document).ready(function() {
// Since the $ function will query the document with the
// specified selector we want to cache these.
// Doing this from within the ready callback allows us
// to keep these references hidden.
var expandAllElement = $("#expandAll"),
contElements = $(".cont"),
triggerElements = $(".trigger");
expandAll = function() {
contElements.removeClass("hid");
triggerElements.html("-");
// Notice how we can chain these calls together?
// jQuery was designed with a fluent interface.
expandAllElement.html("Colapse All").one("click", colapseAll);
};
colapseAll = function() {
contElements.addClass("hid");
triggerElements.html("+");
expandAllElement.html("Expand All").one("click", expandAll);
};
triggerElements.click(function(event) {
// Always define a variable so the 'name'
// is not defined in the global object,
var $this = $(this);
$this.html($this.text() == '+' ? '-' : '+');
$($this.nextAll(".cont").get(0)).toggleClass("hid");
});
// Using the one function allows you to skip
// unbinding the event handler for each click.
expandAllElement.one("click", expandAll);
});