I understand that both of these will insert html into an element.
What are the differences between these 2 methods though?
String:
$(\"div\").app
In your example there's no practical difference. The function accepts strings because you might want to add a new element which doesn't have a jQuery object yet, and it accepts jQuery objects because you might want to append an existing element or a complex object that doesn't have a string representation.