у Ника

имеется кое-что: лог, код, муз

 

16 июля 2008, 21:16

innerHTML, IE, overflow:auto

Интернет — великая вещь.

Весь день в IE делал такое присваивание (javascript):

div.innerHTML = '<p>aaa</p><p>bbb</p><p>ccc</p><p>...';

Отображается только первый P — хоть что делай. При использовании DOM тоже. Если бы не нашел описание этого бага для элементов с overflow:auto;, то не знаю, что делал бы.

В итоге обернул все в таблицу и получил работающий скрипт.

А IE — маст дай!

15 июля 2008, 22:00

CSS reset

Этот кусок CSS сбрасывает все стилевые значения в универсальные для браузеров. Сколько их учтено — не знаю, не нашел, но думаю, firefox и ie уж точно охвачены, а мне большего и не надо.

/* Don't forget to set a foreground and background color 
   on the 'html' or 'body' element! */
html, body, div, span,
applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dd, dl, dt, li, ol, ul,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
    margin: 0;
    padding: 0;
    border: 0;
    font-weight: inherit;
    font-style: inherit;
    font-size: 100%;
    line-height: 1;
    font-family: inherit;
    text-align: left;
    vertical-align: baseline;
}
a img, :link img, :visited img {
    border: 0;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
ol, ul {
    list-style: none;
}
q:before, q:after,
blockquote:before, blockquote:after {
    content: "";
}

Оригинальная статья здесь: http://meyerweb.com/eric/thoughts/2007/04/14/reworked-reset/

Это портирование оказалось, в общем-то, не больше чем забавой, потому что в коде выигрыша не наблюдается. Можно сравнить:

var s = 'aBracadabra';
var regexp = '^abra'
var flags = 'i';

// родной синтаксис из JavaScript
if ( (new RegExp(regexp, flags)).test(s) )
  alert('matched !');

// вызов функции, портированной из PHP
if ( preg_match('/'+regexp+'/'+flags, s) )
  alert('matched !');

Поэтому код только для тех, кому понравилась идея:

// bool preg_match( string pattern, string subject)
// @pattern should be exactly like this:  /pattern/[im]
// ('g' flag is not supported - its for preg_match_all() :)
// Generates global array preg_matches[] with regexp matches.
// Returns true (if matched) or false.
// If matched, preg_matches[0] contains string that satisfied regexp.
var preg_matches = [];
function preg_match(pattern, subject)
{
  // extracting pattern body and flags
  var m = /^/(.*?)/(.*?)$/.exec(pattern); 
  // executing regexp
  if ((preg_matches = (new RegExp(m[1], m[2])).exec(subject)) == null)
    preg_matches = [];
  return preg_matches.length > 0 ? true : false;
}