PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   想問一個 userscript 的問題 (https://www.pcdvd.com.tw/showthread.php?t=1136363)

MrSad 2017-10-19 10:44 PM

想問一個 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 發問看看 = =!

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

hakken 2017-10-20 01:24 AM

你的問題講得不清楚!這裡用你提供的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>

MrSad 2017-10-20 02:18 AM

引用:
作者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 ...我也不知道我卡在那邊
"

hakken 2017-10-20 02:59 AM

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

代碼:

<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>

bigdatasmallapp 2017-10-20 07:42 AM

我個人傾向寫 <div id=""></div> 來做這樣的事情

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

MrSad 2017-10-20 11:59 AM

引用:
作者bigdatasmallapp
我個人傾向寫 <div id=""></div> 來做這樣的事情

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


好的. 我在看一下. 謝謝

MrSad 2017-10-20 12:01 PM

引用:
作者hakken
只是更換部分字串就簡單了
不明白你為何抓不到?


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

我在試試, 不行就貼 freelancer 找人代寫吧 = =

傳說 2017-10-20 03:47 PM

我剛剛以雅虎首頁實驗是沒有問題的!
代碼:
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;

MrSad 2017-10-20 04:30 PM

引用:
作者傳說
我剛剛以雅虎首頁實驗是沒有問題的!

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;


疑!! 我也去試試!!

MrSad 2017-10-20 05:12 PM

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

還有 " 和 ' 的問題

謝謝大家!!


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

vBulletin Version 3.0.1
powered_by_vbulletin 2025。