В моем предыдущем проекте у меня был виджет, который был встроен в другие сайты, и для предотвращения конфликтов имен я использовал префикс всех имен, которые будут использоваться на сайтах встраивания, с двухбуквенным префиксом (идея пришла из Objective C, все классы начинаются с префикса вроде NS ...).
Конечно, я также использовал пространства имен (например, var Foo = {bar: function () {...}}) и "classes" (используя реализацию классов Джона Резига), потому что я использую их независимо от того, есть ли у меня виджет или нет, но имена пространств имен, классов и глобальных переменных или функций имеют префикс - например, HMWidget, HMClass, hmDoSomething () и т. Д.
Относительно идентификаторов DOM и классов CSS - во-первых, мне пришлось избавиться от большинства идентификаторов из-за возможности наличия нескольких виджетов из моего сервиса на одном сайте. Таким образом, единственные идентификаторы, которые были оставлены, были чем-то вроде «widget_12345», чтобы отличать виджеты. Остальные элементы были идентифицированы классами CSS, и все объявления CSS были сделаны относительно основного контейнера виджетов (например, «.my_widget .left_column» вместо просто «.left_column»).