<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Deerua about Coding: последние заметки с тегом &amp;laquo;expression&amp;raquo;</title><link>http://deer.org.ua/keywords/expression/</link><description></description><language>ru</language><generator>e2 (http://blogengine.ru/)</generator><item><title>Одноразовый и Кэшируемый expression в ИЕ (lte 7)</title><guid isPermaLink="true">http://deer.org.ua/2009/09/06/1/</guid><link>http://deer.org.ua/2009/09/06/1/</link><comments>http://deer.org.ua/2009/09/06/1/comments/</comments><description>Все знают о возможностях ИЕ, по части вставки JavaScript кода в CSS, так называемых expression. Казалось бы замечательно, но на самом деле нет. Если мы просто повесим експрешн на какой-нить селектор, он будет вычисляться постоянно, заметно снижая производительность не столь быстрых браузеров.&lt;br /&gt;&lt;br /&gt;Для этого можно использовать одноразовый и  кэшируемый експрешны. &lt;pre&gt;&lt;span class="hl-comment"&gt;/* Одноразовый expression
   * - хак для gte IE7 */
&lt;/span&gt;&lt;span class="hl-identifier"&gt;* html .onecetime &lt;/span&gt;&lt;span class="hl-brackets"&gt;{
    &lt;/span&gt;&lt;span class="hl-reserved"&gt;width: &lt;/span&gt;&lt;span class="hl-code"&gt;expression(
        runtimeStyle.width = "&lt;/span&gt;&lt;span class="hl-string"&gt;auto&lt;/span&gt;&lt;span class="hl-code"&gt;",
        appendChild(createElement("sometag")&lt;/span&gt;&lt;span class="hl-code"&gt;)&lt;/span&gt;&lt;span class="hl-code"&gt;)&lt;/span&gt;&lt;span class="hl-reserved"&gt;&lt;/span&gt;&lt;span class="hl-code"&gt;;
&lt;/span&gt;&lt;span class="hl-brackets"&gt;}&lt;/span&gt;&lt;span class="hl-comment"&gt;
/* элемент создаётся через JS, 
поэтому expression срабатывает только раз */
&lt;/span&gt;&lt;span class="hl-identifier"&gt;* html .onecetime  sometag&lt;/span&gt;&lt;span class="hl-brackets"&gt;{
    &lt;/span&gt;&lt;span class="hl-reserved"&gt;background: &lt;/span&gt;&lt;span class="hl-string"&gt;transparent&lt;/span&gt;&lt;span class="hl-reserved"&gt;&lt;/span&gt;&lt;span class="hl-code"&gt;;
&lt;/span&gt;&lt;span class="hl-brackets"&gt;}&lt;/span&gt;&lt;span class="hl-comment"&gt;
/* Кэшируемый expression */
&lt;/span&gt;&lt;span class="hl-identifier"&gt;* html .cached &lt;/span&gt;&lt;span class="hl-brackets"&gt;{&lt;/span&gt;&lt;span class="hl-comment"&gt;
    /* t = this, 
       Делаем высоту 100% */
    &lt;/span&gt;&lt;span class="hl-reserved"&gt;h: &lt;/span&gt;&lt;span class="hl-code"&gt;expression( function (t) {
        var h = t.parentNode.offsetHeight&lt;/span&gt;&lt;span class="hl-reserved"&gt;&lt;/span&gt;&lt;span class="hl-code"&gt;;
        &lt;/span&gt;&lt;span class="hl-identifier"&gt;if&lt;/span&gt;&lt;span class="hl-code"&gt; (&lt;/span&gt;&lt;span class="hl-identifier"&gt;t.h&lt;/span&gt;&lt;span class="hl-code"&gt; != &lt;/span&gt;&lt;span class="hl-identifier"&gt;h&lt;/span&gt;&lt;span class="hl-code"&gt;) &lt;/span&gt;&lt;span class="hl-brackets"&gt;{
            &lt;/span&gt;&lt;span class="hl-identifier"&gt;t.h&lt;/span&gt;&lt;span class="hl-code"&gt; = &lt;/span&gt;&lt;span class="hl-identifier"&gt;h&lt;/span&gt;&lt;span class="hl-code"&gt;;
            &lt;/span&gt;&lt;span class="hl-identifier"&gt;t.style.height&lt;/span&gt;&lt;span class="hl-code"&gt; = &lt;/span&gt;&lt;span class="hl-identifier"&gt;h&lt;/span&gt;&lt;span class="hl-code"&gt; + "&lt;/span&gt;&lt;span class="hl-identifier"&gt;px&lt;/span&gt;&lt;span class="hl-code"&gt;";
        &lt;/span&gt;&lt;span class="hl-brackets"&gt;}
    }&lt;/span&gt;&lt;span class="hl-default"&gt; (&lt;/span&gt;&lt;span class="hl-identifier"&gt;this&lt;/span&gt;&lt;span class="hl-default"&gt;) );
}&lt;/span&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;a href="http://deer.org.ua/2009/09/06/1/comments/"&gt;Комментарии&lt;/a&gt; к заметке&lt;br /&gt;&lt;br /&gt;Теги:&lt;br /&gt;&lt;a href="http://deer.org.ua/tags/javascript/"&gt;javascript&lt;/a&gt; &amp;gt; &lt;a href="http://deer.org.ua/tags/javascript/expression/"&gt;expression&lt;/a&gt;</description><pubDate>Sun, 06 Sep 2009 10:55:57 +0200</pubDate></item></channel></rss>