2011-07-02 11 views
0

私のコードは以下のようです。最初の警告は "test li 0"とその幅1024を表示しますが、1024幅は正しくありません。実際は約50ピクセルです。テキストの幅を "test li 0"にしたい。 テキストの幅はどのように取得できますか? ペッカが提案jqueryを使って "li"の幅を探したい。どのようにテキストの幅を取得できますか?どうすればいいですか?


$(document).ready(function() { 
var total = 0; 
var i=0; 

$('#menutop > span> li').each(function(index) { 

//var tesi = jQuery("#i_"+i).css('width'); 
var tesi = jQuery("#i_"+i).width(); 
alert(tesi + ':' + $(this).text()); 
total = parseInt(total) + parseInt(tesi); 
i=parseInt(i)+1; 

}); 
alert(total); 
}); 

<ul id="menutop"> 
    <span><li id="i_0" style="background-color:blue;"> test li 0 </li></span> 
    <span><li id="i_1" style="background-color:blue; width:150px;"> test li 1 </li></span> 
    <span><li id="i_2" style="background-color:blue; width:200px;"> test li 2 </li></span> 
</ul> 

+0

」は、「li」の外部では不正です。私はそれらを最初に削除します –

+0

私はスパンを削除しましたが、それは私に同じ幅を与えるでしょう。 – vishal

+1

あなたは1000ピクセル幅ではないと確信していますか? 'li'要素は通常' display:block'であり、画面全体の幅を占めているからです。 –

答えて

1

として、あなたは、Li内のスパンを入れて、以下のアルゴリズムを使用することができます:あなたが望む結果を得るために

$(document).ready(function() { 
var total = 0; 
var i=0; 

$('#menutop > li').each(function(index) { 

//var tesi = jQuery("#i_"+i).css('width'); 
var tesi = $(document.getElementById("i_"+i).firstChild).width(); 
alert(tesi + ':' + $(this).text()); 
total = parseInt(total) + parseInt(tesi); 
i=parseInt(i)+1; 

}); 
alert(total); 
}); 

<ul id="menutop"> 
    <li id="i_0" style="background-color:blue;"><span> test li 0 </span></li> 
    <li id="i_1" style="background-color:blue; width:150px;"><span> test li 1 </span></li> 
    <li id="i_2" style="background-color:blue; width:200px;"><span> test li 2 </span></li> 
</ul> 
+0

'' #i _ "+ i'を使う必要はありません。 「これはいいよ」 –

+0

アラートの1stと2ndの幅です。 2番目の幅の後。それはエラーを与えるでしょう。 :Uncaught exception:[例外... "JavaScriptの引数arg 0を変換できませんでした。[nsIDOMViewCSS.getComputedStyle]" nsresult: "0x80570009(NS_ERROR_XPC_BAD_CONVERT_JS)"場所: "JSフレーム:: http:// localhost/rnd/detect-screen -size/jquery.js :: anonymous :: line 12 "data:no" – vishal

+0

ここではこの解決策を試しました:jsfiddle.net/Kkwxjそして正常に動作しました –

1

を、私はあなたがすべきだと思いますあなたのspanliの中に入れてください:

<ul id="menutop"> 
    <li id="i_0" style="background-color:blue;"><span> test li 0 </span></li> 
    <li id="i_1" style="background-color:blue; width:150px;"><span> test li 1 </span></li> 
    <li id="i_2" style="background-color:blue; width:200px;"><span> test li 2 </span></li> 
</ul> 

そして、次の操作を行います。

のみ、その内容は幅占有し、李さんは、(あなたが1024を得た理由です)、デフォルトですべての幅を占有しようとしますが、スパンがないためだ
... 
$('#menutop > li > span').each(function(index) { //Note the order 
    var tesi = jQuery("#i_"+i+" span").width(); //Get span width instead of li's 
    //... the same code 

これが役に立ちます。乾杯。

+0

「#i _ "+ i''を使う必要はありません。 'これでやる –

0

コードを少し変更してください。

var tesi = jQuery("#i_"+i).css("display", "inline").width(); 
jQuery("#i_"+i).css("display", "block"); 

var tesi = jQuery("#i_"+i).width(); 

それは一時的にインラインに電流<li>変換する幅を算出し、再びブロックに変換します。

関連する問題