• ベストアンサー

jQueryでheightが指定されていないエレメントを得る方法

jQueryでheightが指定されていないエレメントを得る方法 javascirptとjQueryを使ってサイトのデザインを変更しようとしています。 その中で「スタイルシートでheigihtが指定されていない」要素を 対象外にするために取り出そうとしていますが、うまくいきません。 $("*").css("height") 又は$("*").height() は、実態の高さを返します。 それが本来的な使い方で、希望しているものが例外的とは理解しています。 何らかの方法が無いかと悩んでいます。 何か方法まはたヒントがございましたら、ご教授ください。 よろしくお願いします。

  • muuuuu
  • お礼率75% (101/133)

質問者が選んだベストアンサー

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.1

style属性で heightプロパティを指定していない要素なら、element.style.height で判定出来ます。 if (!jQuery('#hoge').get(0).style.height) style属性以外のスタイルシートでスタイルを指定している要素か判定したいのなら、document.styleSheets からスタイル情報を抽出し、.is(selector) で一つ一つ判定してください。 .is() – jQuery API http://api.jquery.com/is/ DOM:document.styleSheets - MDC https://developer.mozilla.org/ja/DOM/document.styleSheets

muuuuu
質問者

お礼

回答ありがとうございます。 タグに設定されたスタイルシートはこのように取り出すのですね。 とても勉強になりました。 質問で情報不足がありました。 実は外部ファイルでのスタイルシート設定の有無を調べたかったのです。 回答にありましたdocument.styleSheetsを下記の方法で調べてみました。 $.each($.makeArray(document.styleSheets), function(){ alert(this.length); }); しかし、結果はunderfinedが3回表示されるだけでした。 document.styleSheetsの考え方が間違っているでしょうか? よろしくお願いします。

muuuuu
質問者

補足

下記の方法で設定を取り出すことが出来るようになりました。 IE8で確認。firefoxではエラー。 $.each($.makeArray(document.styleSheets), function(){ $.each(this.cssRules || this.rules, function(){ if( this.style.height ){ str +=this.selectorText +":" +this.style.height+"\n"; } }); }); alert(str); もう少し出来そうな気がします。

その他の回答 (5)

  • think49
  • ベストアンサー率59% (285/482)
回答No.6

#1~5 です。 jQuery().each() で return false; すると break できると指摘を受けました。 each(callback) - jQuery 日本語リファレンス http://semooh.jp/jquery/api/core/each/callback/ jQuery.each() – jQuery API http://api.jquery.com/jQuery.each/ each() を Array#forEach の代替と思いこんでいたのがいけなかったようです…。 失礼しました。

  • think49
  • ベストアンサー率59% (285/482)
回答No.5

#4 です。 http://code.jquery.com/jquery-1.4.3.js をダウンロードして "some" でgrep検索してみましたが、それらしきコードはHITしませんでした。 jQuery は Array.prototype.some を実装していないのかもしれません。 IE 対応を考慮すると、Array.prototype.some を独自定義する必要がありそうです。

  • think49
  • ベストアンサー率59% (285/482)
回答No.4

#1, 2, 3 です。 ループ処理に jQuery.each を使っているようですが、each は条件に合致しても break できません。 for文で break するか Array.prototype.some に相当する機能を利用した方が良いと思います。 (具体的に何のメソッドが該当するのか、はちょっとわかりませんでしたが…。) jQuery.each() – jQuery API http://api.jquery.com/jQuery.each/

  • think49
  • ベストアンサー率59% (285/482)
回答No.3

#1, 2 です。 Firefox v3.6.6, Google Chrome 6 で動作し、Opera v10.63, IE8 で動作しないスクリプトを制作しました。 (Element.prototype.webkitMatchesSelector が Webkit, Mozilla にしか実装されていないので予想できたことではありますが。) gist: 630663 (matchesCssRule.js) - GitHub http://gist.github.com/630663 jQuery().is() を使えば、IE でも動作するんじゃないでしょうか。 --- 6.2. Matching Elements - Selectors API Level 2 http://www.w3.org/TR/selectors-api2/#matchtesting Node.mozMatchesSelector - MDC https://developer.mozilla.org/en/DOM/Node.mozMatchesSelector

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

#1 の補足。 Webkit には Element.prototype.webkitMatchesSelector が定義されているようです。 webkitMatchesSelector は jQuery.is() と同じ感覚で使えます。(Google Chrome 6 で動作することを確認) <p id="hoge" onclick="alert(this.webkitMatchesSelector('p#hoge'));">paragraph</p> webkitMatchesSelector - Element http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/WebKitDOMRef/Element_idl/Classes/Element/index.html#//apple_ref/js/instm/Element/webkitMatchesSelector/boolean/%28inDOMString%29

関連するQ&A

  • jQuery height();で高さ取得できない

    jQuery初心者です。 宜しくお願いします。 要素の高さを取得するべく $(セレクタ).height(); としております。 取得したい要素ですが cssでのheightは特に固定値ではなくauto設定です。 (コンテンツの量によって可変させるため) これで、$(セレクタ).height(); を使い要素の高さを取得しましたが、 alertで表示させると0となってしまいます。 最終目標は要素の高さ(複数あり横並びで配置)を取得して、 配列におさめ、最高値をわりだして、 横並びの要素の高さを揃えたいと思っています。 その前に… 各要素の高さが取得できないんです。 何が問題なのかをお分かりになる方、 どうぞご教授下さい 宜しくお願いいたします。

  • heightの指定が無視される

    現在wordpressでサイトを作っているんですがimg画像の大きさを指定するのに width指定の方は大きさが変わるんですがheightの指定が無視されて困っています。 CSSの設定でheightだけ無効にするような方法があるのでしょうか。 よろしくお願いいたします。

  • dreamweaverで、tdにheightを指定したのをcssのheightに置き換える方法

    検索および置換で、td height="200" などと指定しているのを td style="height:200px" に一発変換する方法ございますでしょうか。 DW8です。

  • jQueryで要素の生のcssを取得する方法

    jQueryの初心者です、宜しくお願い申し上げます。 jQueryのcss(name)で、要素のstyle属性から指定スタイル(name)の値を取得できることは分かったのですが、{ width:50%; }など、比率で指定している属性はpxに変換されて取得されてしまいます。 変換前の%の値を取得する方法はあるのでしょうか? リファレンスを見た所、そのような記述が見当たらなかったため質問させて頂きました。 一応、 var block_style_str = $('.block').attr('style'); var block_style_array = block_style.trim().split(';'); こんな風にすれば、文字列ベースで自由に取得できますが、jQueryらしいスマートな方法があれば教えて頂きたいです。 詳しい方、ご教授の程、何卒、宜しくお願い申し上げます。

  • $("body").height();と$("body").css("

    $("body").height();と$("body").css("height");の違い? jqueryにてbodyの高さを取得し、その数値に適当な値を足すなり引くなりして、他の要素の高さとして指定するということがやりたかったので $(function() { var bodyheight = $("body").css("height"); var mainheight = bodyheight-230; $("#main").css("height",mainheight); }); とした所、bodyの高さは取得できたのですが、その後が駄目だったので $(function() { var bodyheight = $("body").height(); var mainheight = bodyheight-230; $("#main").height(mainheight); }); と変更したところ、期待通りに動きました。 この2つの違いを、どなたかお分かりになる方にご教授いただきたいです。

  • line-height指定で発生する余白の対応

    line-heightを指定した際に発生する要素の上下の余白(文頭の行の上と文末の行の下)についてご相談です。 行間を指定する上で仕様上仕方のない空白なので、普段は (1)多少の余白なので無視する (2)次に続く要素が背景色or画像orボーダーありの要素以外のときは別途CSSでマージンを調整する (3)ブロック要素の内側に<span>でネガティブマージンを指定して上下のline-heightを相殺する のいずれかで対応しています。 (1)はともかく、(2)は汎用性がいまいちで、構成が変わって画像が間にはいったりしたらクラスをいちいち付け替えなくてはなりません。 (3)に関しては文書構造上余計なタグが入ってしまいますし、ネガティブマージンの多用でかなりカオスなことになってしまいます… かといってデザインに気を使ったサイトやline-heightをかなり広めに指定したいときなど、 見過ごせないときもあるなあと思い、皆様がどう対応しているのかご教授いただければと思います。 よろしくお願いいたします。

    • 締切済み
    • CSS
  • paddingを指定するとwidthやheightが広がってしまう、

    はじめまして。 今回CSSに挑戦しているのですが、widthとheightを指定して、それぞれpaddingを指定すると自動的に指定したpx分だけwidthやheightが広がってしまいます。 見るブラウザによってはwidthやheightに影響することなく指定できたりするのですが・・・ これらを解決する方法はありますでしょうか? 今は、応急処置として大枠の中にもうひとつ枠を用意してmarginを指定しています。 ただ、あまりdivを入れ子?にするにもよくないと聞いたので・・・直接解決できればありがたいのですが・・・ どうかよろしくお願致します。

    • ベストアンサー
    • HTML
  • jQueryでCSSの値を動的に指定する方法

    自分なりに調べてみたのですが、理解不能なのでご教授お願いします。 $("#hoge").css("color","red"); ↑このように指定するとID"hoge"の文字色が赤になる、というCSSのアレンジで、 "red"の部分を動的に指定したいのですが、どのような指定をすれば実現するのでしょうか。 $(document).ready(function() { var test = "red"; $("#hoge").css("color",$test); }); ↑こういう書き方じゃ動きませんでした…。 こちらの質問が似ていたのでマネしてみたのですが、 私が希望する「CSSの値を動的に」はできませんでした。 jqueryのcssを動的指定する方法 http://okwave.jp/qa4268190.html .css()を使わなくても、結果的に同じ動作になる方法ってないものでしょうか? アドバイスを頂けたら助かります。 宜しくお願いいたします。

  • CSSでdivのheightを動的に

    DIV要素を作り、その中にテキストを配置しています。これの高さ(height)をCSSで次のようにしたいのですが。どのようにすれば良いでしょうか。 1.文章量が多く、画面外まではみ出したらDIV要素の高さをそれに追従させる。 2.文章が画面内に収まる場合、余ったスペースをDIV要素ですべて埋める。 DIV要素のheightを動的に変化させたいのでpxによる絶対値指定はしません。パーセント指定で100%にしてもうまくいかず、調べてみたところこれは親要素の値に依存するとのことでした。そこで html, body { height: auto; } #main { height: auto; } としてみたところ、1.の「はみ出した場合のサイズ追従」は実現できましたが、2.の「余ったスペースを埋める」ことはできませんでした。逆に html, body { height: 100%; } #main { height: 100%; } にすると2.の「余ったスペースを埋める」ことはできますが1.の「はみ出した場合のサイズ追従」はできません。この両方を実現することってできませんか?

    • 締切済み
    • CSS
  • jquery droppyについての質問

    現在jquery droppyを使用したWEB画面を作成しています。 画面右上部にあるメニューにて使用しようとしていますが、 画面内に収まらないサイズでプルダウンメニューが出るとスクロールバーが出てしまいます。 現在はcssでポジションを指定しており、見た目では画面内に収まっているのですが、相変わらずスクロールバーは表示されてしまいます。 付属されていたCSSファイルにも指定するような記述はなく、 スタイルでoverflow:hidden;で指定をしてもうまくいきません。 何か解決に繋がるようなヒントがあれば教えていただきたいと思います。 よろしくお願いします。

専門家に質問してみよう