Когда вы применяете border-collapse: collapse; к таблице, чтобы "объединить" границы своих ячеек, они начинают вызывать проблемы при определении ширины ячеек таблицы в Javascript. Например, посмотрите эту страницу:
http://game-point.net/misc/browserTests/scratchpads/jsTableWidth/
Есть две таблицы, одна с обрушенными границами и одна без. Если вы нажмете на строку в строке без сложенных границ, функции jQuery innerWidth и outerWidth сообщают о том, что я ожидаю увидеть (ширина содержимого и содержание плюс ширина границы соответственно, нет отступов).
Однако, если вы нажмете на строку в таблице со сложенными границами, вы получите непоследовательное поведение браузера, особенно в свойстве clientWidth. В Firefox clientWidth совпадает с width(). В IE и Chrome он на 1 пиксель выше, а в Opera - то же, что и width(), но Opera width() слишком мала. Фактически, width() - один пиксель слишком мал во всех браузерах, которые я тестировал, кроме Firefox. Поэтому, если вы сделаете скриншот, а контент на самом деле 80px, width() - 79px (jQuery получает его из вычисленного значения CSS). Почему это?
Я хочу получить ширину фактического содержимого. Кажется, я не использую width(), потому что только Firefox получает это право со сложенными границами. Я не могу использовать outerWidth(), потому что это включает границы (или, может быть, только одну границу, видя, что она на 1px больше, чем фактическая ширина содержимого). Я не могу использовать clientWidth, потому что его значение несовместимо между браузерами. Что мне делать и почему width() 1px слишком короткий в большинстве браузеров, когда границы сбрасываются?