The page may be poorly written, but everything you need to know is there.
Each byte in the attribute table controls which palettes are used by a region of 4x4 tiles (32x32 pixels). Each 2 bits of an attribute byte select a palette for one of the 2x2-tile squares inside the 4x4-tile square, as shown in the graphic at the right.
Bits 0 and 1 select a palette for the 4 tiles at the top left corner, bits 2 and 3 select a palette for the 4 tiles at the top right corner, and so on.
If you pay attention, you'll notice that the whole attribute table can define palettes for an area of 32x32 tiles, while a name table has only 32x30 tiles. This means that the bottommost row of the attribute table isn't used for anything.
EDIT: Just to make it clear, I numbered each attribute byte (in hex) and showed what parts of the screen they affect:
Code:
+--+--+--+--+--+--+--+--+ <-- NT starts here
|00|01|02|03|04|05|06|07|
+--+--+--+--+--+--+--+--+
|08|09|0A|0B|0C|0D|0E|0F|
+--+--+--+--+--+--+--+--+
|10|11|12|13|14|15|16|17|
+--+--+--+--+--+--+--+--+
|18|19|1A|1B|1C|1D|1E|1F|
+--+--+--+--+--+--+--+--+
|20|21|22|23|24|25|26|27|
+--+--+--+--+--+--+--+--+
|28|29|2A|2B|2C|2D|2E|2F|
+--+--+--+--+--+--+--+--+
|30|31|32|33|34|34|36|37|
+--+--+--+--+--+--+--+--+
|38|39|3A|3B|3C|3D|3E|3F| <-- NT ends here
+--+--+--+--+--+--+--+--+
Then each of these bytes/squares is divided like the wiki shows. I also indicated that the bottom half of the last row of attribute bytes isn't used, because the NT ends earlier.