请查看以下2个jsFiddle示例:
示例编号1
第一个是纯html和对Jquery宽度函数的单个调用,然后以像素为单位返回预期的宽度。
Demo with pure HTML
HTML :
<body class="ui-mobile-viewport ui-overlay-a" data-pinterest-extension-installed="cr1.38.2" style="background-color: rgb(255, 182, 50);">
<div data-role="page" data-theme="b" id="mailiPage" style="">
<div id="mainDiv" data-role="content" class="ui-content" data-theme="b" style="text-align:center;background-color:#ffb632;background-image:none;height:100%">
<div class="ui-grid-b">
<div id="left" class="ui-block-a" style="width:5%;"></div>
<div id="center" class="ui-block-b" style="width:90%;"></div>
<div id="right" class="ui-block-c" style="width:5%;"></div>
</div>
</div>
</div>
</body>
JAVASCRIPT:
alert('this width of the center div is in pixels: ' + $('#center').width() + '\n');
示例编号2
第二个例子包括用于动态编写html的javascript,而不是调用width函数,在这种情况下返回百分比值而不是像素宽度。
Demo with only Javascript
JAVASCRIPT:
var strPage = ""
var leftSideColumnsWidth = 5;
var rightSideColumnsWidth = 5;
var centerColumnsWidth = 90;
$("body").empty();
strPage = strPage + "<div data-role='page' data-theme='b' id='mailiPage' style=''>"
strPage = strPage + "<div id='mainDiv' data-role='content' class='ui-content' data-theme='b' style='text-align:center;background-color:#ffb632;background-image:none;height:100%'>" //padding-top: 56px;'>"
strPage = strPage + "<div class='ui-grid-b'>"
strPage = strPage + "<div id='left' class='ui-block-a' style='width:" + leftSideColumnsWidth + "%;'>"
strPage = strPage + "</div>"
strPage = strPage + "<div id='center' class='ui-block-b' style='width:" + centerColumnsWidth + "%;'>"
strPage = strPage + "</div>"
strPage = strPage + "<div id='right' class='ui-block-c' style='width:" + rightSideColumnsWidth + "%;'>"
strPage = strPage + "</div>"
strPage = strPage + "</div>"
strPage = strPage + "</div>"
strPage = strPage + "</div>"
$("body").append(strPage);
alert('this width of the center div is not in pixels but in percentage: ' +$('#center').width()+'\n');
知道为什么会这样做?
更新
在动态版本中,如果您标出定义JQM页面的第一个div并包含“data-role ='page'”,则width函数将返回以像素为单位的值! 现在问题仍然是为什么?
答案 0 :(得分:4)
jQuery Mobile页面,即[data-role=page]
的div元素最初是隐藏的。对于隐藏的元素:
.width()
报告的值不保证准确 何时隐藏元素或其父元素。要获得准确的价值, 在使用.width()
之前,请确保元素可见。 jQuery会 尝试暂时显示然后重新隐藏元素以便 测量它的尺寸,但这是不可靠的(即使是 准确)可以显着影响页面性能。这个 可以在将来的版本中删除show-and-rehide测量功能 jQuery。
话虽如此,你可能想要look at this example,它挂钩了pageshow事件,以确定页面(以及元素)是否可见。