7cc@はてなブログ

JavaScriptとかとか

CSS transformが効かない

CSS transformの適用される要素は決まっていて、仕様ではtransformable elementsと呼ばれる。 そのため、他の要素に使おうとしても効かない。

transformable elements(変形可能要素) = transformが使える要素

  • Block-level elements (divとか)
  • atomic inline-level boxes:
    replaced inline-level elements, inline-block elements, and inline-table elements
    (置換インライン要素: img, input, buttonなど)
  • CSS display: table-* が指定された要素
  • SVG (IE9だと効かない)

つまり適用されない要素は

  • 普通のinline要素 = 非置換インライン要素。span, em, など。
  • あとは・・・何だろう?

参照

element.ownerDocument.defaultView.frameElement

iframe traversal iframe, window, documentを移動する window document iframe[name=foo] window document element window.top window.parent window.foo window.frames[n] window[n] document contentWindow frameElement contentDocument defaultView ownerDocument

実はこのエントリはSVGの練習も兼ねていたり。上の画像のテキストは選択可能。
IE9だと矢印の一部が表示されませんorz。

続きを読む

JavaScriptでグローバル変数になるものの、優先順位

window.fooになるもの。
id属性のある要素や、name属性のあるiframeもグローバル変数になる。

グローバル変数 > 組み込みプロパティ > Iframe[name=foo] > element[id=foo] > form[name=foo]
続きを読む

You might not need jQuery は間違いだらけ

追記: 文面を修正しました。 2018-05-21

すこし話題になっている(いた?)ようだが、jQueryを(読むだけで自分では)使ったことの無い私が気付いただけで間違いが10個あった。

サイトはここ
GitHubにソースがある

見つけた間違い

60個あるうち10個
つまり全体の1/6, 16.6%

内容についてはレポジトリ参照(しかし、そこまでする利点は無いので見なくてよいです)

メソッド どうしたか
children 既にissueにあった
contains issue出した
empty issue出した
fadeIn issueで指摘されたのに確認されないまま閉じられたのでコメントした
trigger issue出した
offset PR(Pull Request)が間違っていたのでコメントした
outerWidth/Height PRを取り入れていたが、やはり間違っていたのでコメントした
AJAX グローバル変数になっている。onloadの中も変。面倒なので何もしない。
parseHTML childNodesを使うべきところでchildren。何もしない。

※表だと9だが、outerのところで2つなので10とカウント

trigger, offset, outerHeight は 2014/03/06現在 まだ修正されていない。
emptyは修正しないようだ。
さらに、formの部品になる要素のcloneNodeなど、本当は要修正がまだある(IEではコピーした要素のvalueが空になる)。

このレポジトリのオーナーは

  • jQueryのソースを全く読まず
  • まともにテストもせず

に書いている。断言できる。まだ間違いはありそうだけど、これ以上はやめにした。

見た時にはすでに修正されていたが、isArrayの方法がメチャクチャだった。これ一つだけでも、どれだけひどいかが十分に分かる。

isArray = Array.isArray || function(arr) {
  return arr.toString() == '[object Array]'
}

このレポジトリに対する反応

Github

3000スター以上付いている。どういうことなの・・・

jQuery作者のツイート

この返しが面白い

雑感

  • 素直にjQuery使うほうが良い。必要な部分だけコピーして使うこともできるわけで。
  • 前述の通り誤りがあるのでサイトのコードは使わないようにしよう。