htsign's blog

ノンジャンルで書くつもりだけど技術系が多いんじゃないかと思います

DOM

DOM弄り

仕事中息抜きに書いてた。 文書の元々のソースコードと実際の表示が違うというのをやってみたかった。ちなみに文書を読み込んだ時点で文書型は決まってしまうので、あとからDOCTYPE書き換えても意味ないです。https://dl.dropboxusercontent.com/u/414379/ww…

IEの開発者コンソールで見るテキストノードについて

IEの開発者コンソールで var textNodeIterator = document.createNodeIterator( document, NodeFilter.SHOW_TEXT, function(node){ return /^\s*$/.test(node.textContent) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; }, false); textNodeIterat…

DOMParser と XMLSerializer

DOMParserは覚えてるけどXMLSerializerをしょっちゅう忘れちゃうのでメモ。 var parser, serializer; var input, output; var dom; input = '<div id="test"><p>hogehoge</p></div>'; parser = new DOMParser(); try { dom = parser.parseFromString(input, "text/html").getElementById(…

テキストをパースして要素に追加する処理比較

有名なのはinnerHTMLですね。 ただ、これ以外にもテキストを評価してDOMツリーに追加する方法がありますので、今回はこれをやってみました。単純にループで同じメソッドおよびプロパティ操作をしているだけです。 試行回数は1000回ですが、これはinnerHTMLの…

MIMEタイプが audio/xxx か video/xxx なファイルをで直接参照していた場合にやを直後に追加するスクリプト

あっちの界隈でよくあるADV*1なんかだと、公式サイトのキャラ紹介にmp3なファイルが直接置かれている場合が少なくありません。 特にIEさんやFxさんはこの手のものに出会うと、デフォルトでは一旦DLしてローカルの別のアプリケーションで再生する、という挙動…

【修正版】httpやttpやtpなリンクのないURLにリンクを付けるありきたりなスクリプトを回りくどいコードで書いた

前回載せたスクリプトのバグ修正が完了したので再掲。原因はなんとなくだけど検討ついたので、とりあえず書き換えてみたら見事正常に機能するようになりました。 while ((regRes = pattern.exec(self.textContent)) !== null) { var a = document.createElem…

httpやttpやtpなリンクのないURLにリンクを付けるありきたりなスクリプトを回りくどいコードで書いた

主に自分で使う用に。 よく出回ってるようなコードは "簡素だけどDOM標準は無視" というのが多かった(大体innerHTMLをreplaceしてる)ので、ならばと自分で書きました。 (function(){ // Rangeが使えなければ意味が無いので、ここで一旦判定をしています。 …

insertRuleメソッドについて

HTMLStyleElement の sheet プロパティは常に存在するわけではないらしい。 var s = document.createElement("style"); // この時点ではまだ存在していない console.log(s.sheet); // ==> null s.sheet.insertRule("#hoge{box-shadow:1px 1px #333;}", 0); /…

Rangeオブジェクトの速度に対するちょっとしたテスト

同じ個所に複数のノードを追加する場合でも、 なぜかRangeオブジェクトで範囲とって一気に追加するよりもinsertBeforeメソッドの方が全体的に速かったみたいです。 内部的な処理は少ないと思うんだけどなぁ…。なんか悲しい。 var doc = document; var hoge =…

window.open で生成した DOMWindowオブジェクトのDOCTYPEを指定する

完全に趣味の範囲ですが…。下記コードで使われることになる document.implementation ですが、主要ブラウザはほぼ対応しています。 ただしIE8のみDOMImplementationは存在しているのに、メソッドがないという謎な状況になっています。 // wnd に DOMWindowを…