3

新しいプロジェクト(特にIE8 +を対象とする)でPIE.htcのバージョンを正常に使用していますが、PIEスタイルが適用されている要素のクローンを作成しようとすると問題が発生します。

ここで問題を説明するjsfiddleを入手しました。入力は大歓迎です(他の、PIEと同様のアプローチ/代替手段でも)-ただし、.htcファイルはクロスドメインで参照できないため、このフィドルには、使用する実際のマークアップとCSSのみが含まれています。

どんな助けでも大歓迎です。これを引き起こしている可能性がありますが、潜在的な回避策はありますか?

乾杯、peol

4

1 に答える 1

6

PIEの子孫で要素を複製するときに発生する問題は2つあります。

  1. PIEが挿入したVML要素も複製されたコンテンツに含まれますが、何らかの理由で名前空間プレフィックスなしで誤って複製され、
  2. PIEが各ターゲット要素に設定する一意の_pieId属性もクローンにコピーされるため、一意ではなくなったID間の衝突が発生します。

したがって、適切なクローンを作成するには、両方を削除する必要があります。最初の方法は、PIEの各要素の動作スタイルプロパティを一時的に「none」に設定し、後でクローンを作成して復元することで実行できます。'none'に設定すると、すべてのVML要素を削除するPIEのクリーンアップメソッドがトリガーされます。PIEは_pieId属性を自動的に削除しないため、2番目の項目は手動で実行する必要があります。これらは両方とも、スクリプトを作成するのに十分簡単です。

これが私の限られたテストでこれを処理するカスタムjQuery拡張機能です:

jQuery.fn.cloneWithPIE = function(dataAndEvents, deepDataAndEvents) {
    // Find elements with PIE attached and remove their behaviors:
    var pied = this.find('[_pieId]').css('behavior', 'none');

    // Perform the clone:
    var clone = this.clone(dataAndEvents, deepDataAndEvents);

    // Remove the _pieId from each of the original and cloned 
    // elements, and restore the behavior:
    pied.add(clone.find('[_pieId]')).removeAttr('_pieId').css('behavior', '');

    return clone;
}

次に、通常のcloneメソッドを呼び出すのと同じように、cloneWithPIEメソッドを呼び出します。

$('.someEl').cloneWithPIE().appendTo(newParent)

それがあなたのために働くことを願っています。

于 2011-06-17T03:11:54.237 に答える