PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

回應
 
主題工具
MrSad
Basic Member
 

加入日期: Mar 2017
文章: 19
想問一個 userscript 的問題

我知道在這問程式問題很惷....但之前有人問過我也有幫忙回答下 XD

沒有其它程式論檀的帳號... 很不要臉的來這發問. 真的很不好意思

是這樣的, 我想在 firefox 上裝 Greasemonkey userscript 外掛, 當載入特定網頁時將 table 切成兩個

其中關鍵部份我一直稿不定. javascript 和我真的不是很熟, html 也只是基儲

原本的 CODE

... 上面的 code
<TABLE width="370" align="center" border="0" style="font-size:7pt;font:bold">
... 下面的

要在前面在插入
</td></tr></tbody></table><table><tbody><tr><td>

變成

</td></tr></tbody></table><table><tbody><tr><td><TABLE width="370" align="center" border="0" style="font-size:7pt;font:bold">

看了很多 Greasemonkey 照著一篇寫了簡單的 user script

var HTML = document.body.innerHTML;
HTML = HTML.replace(/width="370"/ig, 'width="380"');
document.body.innerHTML = HTML;


可以成功的將 width="370" 換成 width="380"

但要是我括大一點

HTML = HTML.replace(/<TABLE width="370"/ig, '<TABLE width="380"');

確又不行!!

頭疼呀. 晚點也去 stackoverflow 發問看看 = =!

有沒有大大可以提供解決方案
     
      

此文章於 2017-10-19 10:46 PM 被 MrSad 編輯.
舊 2017-10-19, 10:44 PM #1
回應時引用此文章
MrSad離線中  
hakken
Regular Member
 

加入日期: Sep 2002
您的住址: Earth
文章: 56
你的問題講得不清楚!這裡用你提供的code隨便寫一個把一個表切開的網頁,也許對你有參考價值!
下面的code存成~~~.html用瀏覽器執行!sorry沒有幫助的話

代碼:
<html>

<head>

</hread>
<body>
<button onclick="split_table();">切開</button>
<TABLE width="370" align="center" border="0" style="font-size:7pt;font:bold;background-color:red;" >
 <tr><td>part1</td><td>part1</td><td>part1</td></tr>
 <tr><td>part1</td><td>part1</td><td>part1</td></tr>
 <tr><td>part1</td><td>part</td><td>part1</td></tr>
 <tr id="2"><td>part2</td><td>part2</td><td>part2</td></tr>
 <tr><td>part2</td><td>part2</td><td>part2</td></tr>
 <tr><td>part2</td><td>part2</td><td>part2</td></tr>
</TABLE>

</body>
</html>

<script>


String.prototype.insert = function (index, string) {
  if (index > 0)
    return this.substring(0, index) + string + this.substring(index, this.length);
  else
    return string + this;
};

function split_table(){
   var HTML = document.body.innerHTML;
   var index = HTML.indexOf('<tr id="2">');
   document.body.innerHTML = HTML.insert(index, '</TABLE><br><TABLE width="370" align="center" border="0" style="font-size:7pt;font:bold;background-color:yellow;" >');
}

</script>
 
舊 2017-10-20, 01:24 AM #2
回應時引用此文章
hakken離線中  
MrSad
Basic Member
 

加入日期: Mar 2017
文章: 19
引用:
作者hakken
你的問題講得不清楚!這裡用你提供的code隨便寫一個把一個表切開的網頁,也許對你有參考價值!
下面的code存成~~~.html用瀏覽器執行!sorry沒有幫助的話



喔喔! 抱歉! 沒把問題講清處

因為它 table 沒有 id 之類的東西可以抓到 elemenmt 之類的.

所以我單純的想用文字方式來處理. 找到 "TABLE width="370" align="center" border="0" style="font-size:7pt;font:bold">"

這段, 然後用 </td></tr></tbody></table><table><tbody><tr><td><TABLE width="370" align="center" border="0" style="font-size:7pt;font:bold">

整段來取代.

簡單來講就是搜尋特定字串 html 內文並以另一段 html 內文取代

但 .replace 竟找不到 <TABLE width=370 這段. 因為我不是很熟 javescript ...我也不知道我卡在那邊
"
舊 2017-10-20, 02:18 AM #3
回應時引用此文章
MrSad離線中  
hakken
Regular Member
 

加入日期: Sep 2002
您的住址: Earth
文章: 56
抓得到啊

只是更換部分字串就簡單了
不明白你為何抓不到?

代碼:

<html>

<head>


</hread>
<body>
<button onclick="toggle_width();">大小</button>

<TABLE width="370" align="center" border="0" style="font-size:7pt;font:bold;background-color:red;" >
 <tr><td>part1</td><td>part1</td><td>part1</td></tr>
 <tr><td>part1</td><td>part1</td><td>part1</td></tr>
 <tr><td>part1</td><td>part</td><td>part1</td></tr>
 <tr><td>part2</td><td>part2</td><td>part2</td></tr>
 <tr><td>part2</td><td>part2</td><td>part2</td></tr>
 <tr><td>part2</td><td>part2</td><td>part2</td></tr>
</TABLE>


</body>
</html>

<script>

var HTML = document.body.innerHTML;

var change = false;

function toggle_width(){
   
   if(change = !change){
   	 document.body.innerHTML = HTML.replace(/<TABLE width="370"/ig, '<TABLE width="380"'); 
   }else{
   	 document.body.innerHTML = HTML;
   }
  
}

</script>
舊 2017-10-20, 02:59 AM #4
回應時引用此文章
hakken離線中  
bigdatasmallapp
Regular Member
 

加入日期: Oct 2017
文章: 64
我個人傾向寫 <div id=""></div> 來做這樣的事情

如果可以使用 jQuery,還能將程式簡化,考慮一下
舊 2017-10-20, 07:42 AM #5
回應時引用此文章
bigdatasmallapp離線中  
MrSad
Basic Member
 

加入日期: Mar 2017
文章: 19
引用:
作者bigdatasmallapp
我個人傾向寫 <div id=""></div> 來做這樣的事情

如果可以使用 jQuery,還能將程式簡化,考慮一下


好的. 我在看一下. 謝謝
舊 2017-10-20, 11:59 AM #6
回應時引用此文章
MrSad離線中  
MrSad
Basic Member
 

加入日期: Mar 2017
文章: 19
引用:
作者hakken
只是更換部分字串就簡單了
不明白你為何抓不到?


這也是我很疑惑的地方, 在 C 來看只是字串替換
不曉得為甚麼用 DOM 元件就不行

我在試試, 不行就貼 freelancer 找人代寫吧 = =
舊 2017-10-20, 12:01 PM #7
回應時引用此文章
MrSad離線中  
傳說
Amateur Member
 

加入日期: Jun 2002
您的住址: 太陽系
文章: 32
我剛剛以雅虎首頁實驗是沒有問題的!
代碼:
var HTML = document.body.innerHTML;
HTML = HTML.replace(/<TABLE class="W-100 M-0/ig, '<TABLE class="W-100 M-1');
document.body.innerHTML = HTML;
__________________
PCDVD站長:擋廣吿的後果就是導致免費網站無以為繼!
在你享受自由網路的同時
自私的行為只會扼殺這個環境。
舊 2017-10-20, 03:47 PM #8
回應時引用此文章
傳說離線中  
MrSad
Basic Member
 

加入日期: Mar 2017
文章: 19
引用:
作者傳說
我剛剛以雅虎首頁實驗是沒有問題的!

var HTML = document.body.innerHTML;
HTML = HTML.replace(/<TABLE class="W-100 M-0/ig, '<TABLE class="W-100 M-1');
document.body.innerHTML = HTML;


疑!! 我也去試試!!
舊 2017-10-20, 04:30 PM #9
回應時引用此文章
MrSad離線中  
MrSad
Basic Member
 

加入日期: Mar 2017
文章: 19
var HTML = jQuery("body").html();

console.log(HTML);


var src = '<table style="font-size:7pt;font:bold" width="370" border="0" align="center">';
var tag = '<\/td><\/tr><tr><td><table style="font-size:7pt;font:bold" width="370" border="0" align="center">';
HTML = HTML.replace(src, tag);


jQuery("body").html(HTML);


我找到問題了...

右鍵 source code 看到的並不是真的完全和 server 送過來的一樣. 我猜可能是流覽器又順過一次

其中

<TABLE != <table

還有 " 和 ' 的問題

謝謝大家!!
舊 2017-10-20, 05:12 PM #10
回應時引用此文章
MrSad離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是08:58 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2024。