change .before() interface
test more, update doc