2012-03-01 15 views
1

在我的頁腳,我寫了這個功能...jQuery Mobile的,活的(「pageinit」,函數()方法,將數據主題

jQuery('#page').live('pageinit', function() { 
$('.widget ul').attr('data-inset', 'true'); 
$('.widget ul').attr('data-theme', 'd'); 
$('.widget ul').attr('data-dividertheme', 'b'); 
$('.widget ul').attr('data-role', 'listview'); 
$('.widget ul').listview(); 
$('a.post-edit-link').attr('data-inline', 'true'); 
$('a.post-edit-link').attr('data-role', 'button'); 
$('a.post-edit-link').button(); 
$('#commentform').attr('data-theme', 'e'); ... 

那麼,如何在最後一行申請數據主題?什麼是方法,爲「列表視圖」或「按鈕」

我也想知道如何運用「窗口小部件UL」的第一屬性...

$(」插件UL?。第一')

不起作用。

感謝您的幫助!

此致

V.

回答

2

.widget ul:first將選擇第一ul元件是一個.widget元件的後代。如果您想選擇ul中的第一個列表項,則需要:.widget ul li:first

表單本身不會被jQuery Mobile初始化,所以您不需要定位表單,而是需要定位特定的輸入小部件並初始化它們。

要初始化一堆元素,你可以選擇所有這些,呼籲他們.trigger('create')

$('#commentform').find('input, textarea').trigger('create'); 

,當你想更新的小部件,而不是對它們進行初始化這得到稍微棘手:

$('#commentform').find('input[data-type="slider"]').slider('refresh').end() 
       .find('input[type="text]').textinput('refresh').end() 
       .find('input[type="checkbox"], input[type="radio"]').checkboxradio('refresh'); 

您也可以通過鏈接函數調用來優化代碼,而不是多次重新選擇相同的元素:

$('.widget ul').attr('data-inset', 'true') 
       .attr('data-theme', 'd') 
       .attr('data-dividertheme', 'b') 
       .attr('data-role', 'listview') 
       .listview(); 

$('a.post-edit-link').attr('data-inline', 'true') 
        .attr('data-role', 'button') 
        .button(); 

或者你也可以傳遞一個對象來.attr()設置的所有屬性的一個函數調用:

$('.widget ul').attr({ 
        'data-inset'  : true, 
        'data-theme'  : 'd', 
        'data-dividertheme' : 'b', 
        'data-role'   : 'listview' 
       }).listview(); 

$('a.post-edit-link').attr({ 
         'data-inline' : true, 
         'data-role' : 'button' 
        }).button(); 
+0

謝謝你的明確解釋和你有用的建議。現在我明白了......即使路很長! :) – Vincent 2012-03-01 19:36:17

+0

@Vincent我想知道你發現的其他答案是怎麼幫助你的......邏輯上,答案中的代碼和你的代碼完全一樣......'$('。widget')。first(' ul');'返回與$('。widget ul:first')'相同的東西。 – Jasper 2012-03-01 19:37:25

+0

這是一個很好的看到鏈接效果的地方,並且顯示了使用一個對象而不是兩個參數的區別。 – Relic 2012-03-01 20:16:15

0

不知道爲什麼數據thene的評論形式additon是不工作...

jQuery('#page').live('pageinit', function() { 
    var ulList = $('.widget ul'), aTag = $('a.post-edit-link') 
    ulList.attr('data-inset', 'true'); 
    ulList.attr('data-theme', 'd'); 
    ulList.attr('data-dividertheme', 'b'); 
    ulList.attr('data-role', 'listview'); 
    ulList.listview(); 
    aTag.attr('data-inline', 'true'); 
    aTag.attr('data-role', 'button'); 
    aTag.button(); 
    $('#commentform').attr('data-theme', 'e'); ... 

嘗試第一次(原因是,您不希望每次爲該jQuery對象解析DOM,而是將其保存到內存中,它會節省很多處理時間)...現在,試試這個爲您的選擇問題:

$('.widget').first('ul'); 
+0

如果您在jQuery Mobile文檔頁面上籤出表單,您會注意到表單沒有要設置的「data-theme」屬性。所以設置一個很可能會被jQuery Mobile忽略。 – Jasper 2012-03-01 19:19:46

+0

@Relic也謝謝你。我很遺憾,我不能同時投票給你和賈斯珀。 – Vincent 2012-03-01 19:37:00

+0

很酷,他完全掌握了你的答案! – Relic 2012-03-01 20:14:57