2012-11-02 17 views
1

我正在嘗試爲我的項目製作上一個/下一個按鈕。這裏是修剪它的代碼。上一個/下一個Javascript字符串處理?

<html> 
<head> 
<script> 
function prevP() {var element = document.getElementById("framePage"); 
      element = element.src; 
      elementLen = element.length; 
      elementLen = elementLen-6; 
      elementChar = element.charAt(elementLen) 
      elementChar = --elementChar 
      newElement = element.replace(element.charAt(elementLen),elementChar); 
      document.getElementById("framePage").src=(newElement);} 

function nextP() {var element = document.getElementById("framePage"); 
      element = element.src; 
      elementLen = element.length; 
      elementLen = elementLen-6; 
      alert(elementLen); 
      elementChar = element.charAt(elementLen) 
      elementChar = ++elementChar 
      newElement = element.replace(element.charAt(elementLen),elementChar); 
      document.getElementById("framePage").src=(newElement);} 
</script> 
</head> 
<body> 
<iframe src="www.websiteendingwithnumber1.com" id="framePage"></iframe> 
</br> 
<input type="button" onClick="prevP()" value="Previous"> 
<input type="button" onClick="nextP()" value="Next"> 
</body> 
</html> 

我的項目在iframe中創建大約40-120個html頁面供顯示。您可以使用「上一個/下一個」按鈕翻閱它們。每個頁面在最後動態地用一個數字命名。例如/path/mountpoint0/page/page0.html,page1.html ... page5.html,依此類推。我試圖做的是基本上每個函數都會讀取iframe src的當前URL,然後根據您按下的按鈕將其設置爲所需的src。基本上,如果你在第5頁,將切片了繩子,並設置src到第四頁,如果你打以前,第6頁如果下次,等等等等

一個警告!我還爲動態生成的iframe HTML文件提供了一個動態生成的掛載點(ramdisk)。我的項目將檢測是否存在掛載點,並相應地將其重命名爲新的掛載點,如果mountpnt0存在,則使用IE,創建並使用mountpnt1,等等等等,直到它可以。所以!我看到的錯誤是它改變了掛載點上的數字,而不是html文件。示例iframe.src = /tmp/prevram0/html/page0.html。我點擊下一步,吐我到一​​個頁面未找到錯誤,並試圖去/tmp/prevram1/html/page0.html。我再次點擊,然後翻轉另一個號碼/tmp/prevram1/html/page1.html。所需的操作是,iframe.src = /tmp/prevram0/html/page0.html。我點擊下一步,然後將iframe.src設置爲/tmp/prevram0/html/page1.html。

我很抱歉,如果這是令人費解的或沒有作出太大的意義。這個項目大部分都在Python中,我正在使用HTML/JS來創建我的項目的報告功能。我對python相當陌生,知道我的方式足夠體面,但JS對我來說是全新的,所以我爲我所有的(可能)頭疼都引起了noob錯誤而道歉。但我真的想就如何最好地處理這個問題:)

非常感謝大家的一些領導和指導!

編輯 - 快速說明。

編輯2 - 我要感謝大家對他們的巨大投入爲止!我真的,真的很感激它!我現在正在照顧一些工作,所以當我有機會與我的項目坐下來時,我會嘗試一下你的建議,看看發生了什麼變化:)再次感謝你們(和加爾斯?)!

編輯3 - window.onload = function(){ pageNo = 0; baseUrl = document.getElementById('+ q1 +'baseurl'+ q1 +')。innerHTML; }

window.onload = function(){ 
lPageNo = document.getElementById('+q1+'lPageNo'+q1+').innerHTML; 
} 

function prevP() { 
if(pageNo > 1) { pageNo--; } 
var prevEl = document.getElementById('framePage'); 
prevEl.src = baseUrl + pageNo + '.html'; 
} 

function nextP() { 
if(pageNo<lPageNo) { pageNo++; } 
var nextEl = document.getElementById('framePage'); 
nextEl.src = baseUrl + pageNo + '.html'; 
} 

<span id="baseurl" style="display:none;">'+prevram+'/html/page</span> 

<span id="lPageNo" style="display:none;">'+str(ptit)+'</span> 

(prevram,Q1和ptit都在我的Python腳本的Python變量。prevram是安裝點和ptit是頁碼計數器。Q1是一個單引號)。

+0

嗯...你能當掛載點是澄清決心? 它是由JavaScript,還是在服務器端? – user1600124

+0

@ user1600124 - 該腳本實際上在本地機器上運行。它是一個python腳本,它會生成並掛載掛載點。腳本的另一部分生成網頁,其中包含的JS向您顯示了python腳本的結果,因此python腳本確定本地計算機上的掛載點並掛載它。 - 編輯澄清。 – 0xhughes

+0

對不起,本週末遠離電腦.. 請問爲什麼用document.getElementById('+ q1 +'lPageNo'+ q1')?因爲span id只是「lPageNo」...是'+ q1 +'='「'? – user1600124

回答

0

假設你的掛載點由服務器決定,我會嘗試這樣說: 隱藏在網頁中包含基本字符串一個元素:

<span id="base" style="display:none;">/tmp/prevram0/html/page</span> 

然後綁定一個處理程序加載事件來獲取信息:

window.onload= function() 
{ 
    baseString = document.getElementById('base').innerHTML; 
    document.getElementById('framePage').src = baseString + pageNo + '.html'; 

} 

其中即basestring是在代碼中的某處定義的變量,這些功能全局訪問。而pageNo是另一個用初始頁碼預定義的變量。

然後上一頁功能:

function PrevP() 
{ 
    if(pageNo > 1) 
    { 
     pageNo--; 
    } 
    var el = document.getElementById('framePage'); 
    el.src = baseString + pageNo + '.html'; 
} 

下一頁功能您只需添加您做生意起來,做同樣的事情:

function NextP() 
{ 
    if(pageNo<lastPageNo) 
    { 
      pageNo++; 
    } 
    var el = document.getElementById('framePage'); 
    el.src = baseString + pageNo + '.html'; 
} 
+0

感謝您的意見:)代碼看起來對我非常友好,我會嘗試一下尺寸並報告結果!再次感謝。 – 0xhughes

+0

嘗試了你的代碼,稍微調整了它,可能會搞砸了,編輯3包含函數和HTML,它不工作,我嘗試在下一個和前一個函數中放入一些JS警報,以查看是否有錯誤但警報甚至沒有出現。對不起,糾纏你! – 0xhughes

+0

我知道它的工作原理,單引號在我的一個python變量聲明上搞砸了,我的一個java變量是不匹配的。感謝一百萬用戶! – 0xhughes

1

JavaScript的字符串.replace() method搜索源字符串,查找您在第一個參數中傳遞的任何內容。如果第一個參數是一個字符串,那麼它只會替換它的第一個實例。如果第一個參數是一個正則表達式,則可以執行更復雜的模式匹配和全局替換。如果第二個參數是一個函數,則可以進行更復雜的替換:將爲每個匹配調用該函數,讓您處理每個匹配,但是您認爲合適並返回替換值 - 這對於您想要的情況非常適用增加或減少一個數字。你的情況與形式/tmp/prevram0/html/page0.html字符串

function prevP() { 
    var element = document.getElementById("framePage"); 

    element.src = element.src.replace(/(\d+)(.html$)/, 
            function(m,p1,p2){ return (+p1) -1 + p2; }); 
} 
function nextP() { 
    var element = document.getElementById("framePage"); 

    element.src = element.src.replace(/(\d+)(.html$)/, 
            function(m,p1,p2){ return (+p1) +1 + p2; }); 
} 

我用驗看位數字加.html在源字符串的結尾正則表達式,所以它只能找到

試試這個第二個0。第二個參數中的回調使用一元加運算符將數字字符串轉換爲數字,將其減1或加1,然後將.html位返回。

請注意,這並不做任何範圍檢查,所以它會不斷嘗試去以前,即使已經爲0。

演示:http://jsfiddle.net/3VFvz/

你的代碼的一些其他提示:

  • 除了element之外,所有變量都是全局變量,因爲它們沒有在var語句中聲明。
  • .charAt()返回一個字符串,所以對結果使用--運算符沒有意義。
  • 你可以這樣說elementLen = element.length - 6,你不需要做-6部分作爲單獨的語句。
  • 這是一個比較正常的JS風格放就行了函數體的第一行{後,把該函數的收盤}在自己的行 - 除了可能的話,對於非常短的功能,這些功能完全在我的答案中,如上所述。
+0

我更想的是擁有一個baseString =「/ tmp/prevram0/html/page」的行,然後var pageNo = whatever頁你在...然後你只是設置src = baseString + pageNo.toString()+'.html'... – user1600124

+0

@ user1600124 - 當然,這也可以,並且可以更容易地添加範圍檢查(注意,在你的例子中你不需要'.toString()') – nnnnnn

+0

嘿,謝謝你的迴應!你的代碼對我來說大多是合理的,除了函數(m,p1,p2)部分。是m,p1和p2運算符嗎?我看不到它們聲明d作爲變量,所以我不確定這些是什麼意思!對不起,總共JS noob!你對替換的評價總是有意義的,即使我開始懷疑是不正確的:)再次感謝你的輸入。 – 0xhughes

相關問題