2013-08-20 66 views
0

我想隱藏SSRS報告的工具欄。隱藏沒有div或類的JS元素

爲什麼我需要使用JS有一個特定的原因(該報告將包含在CRM 2011儀表板中,並且我想從報告中刪除工具欄。由於報告參數無效,因此我導入了Report Control解決方案,我正在編輯查看器,它使用JS)。查看器是一個將報告作爲IFrame嵌入的Html頁面。 生成的HTML代碼是:

<table id="reportViewer_fixedTable" cellspacing="0" cellpadding="0" style="table-layout:fixed;width:100%;height:100%;"> 
    <tbody> 
     <tr style="background-color:#C4DDFF;"> … </tr> 
     <tr id="ParametersRowreportViewer" style="display:none;"> … </tr> 
     <tr style="height:6px;font-size:2pt;display:none;"> … </tr> 
     <tr> 

工具欄是在第四TR,並直接選擇它,並試圖掩蓋它沒有工作。

navCorrectorDiv = report.contentWindow.document.getElementById('reportViewer_Toolbar'); 
if (navCorrectorDiv != null) { 
    navCorrectorDiv.style.display = "none"; 
} 

我應該選擇表reportViewer_fixedTable,我能做的,然後選擇tbody元素,然後第四TR。 有沒有辦法做到這一點?可能沒有jQuery。

+0

正是你想要hide.Elaborate一點 –

+0

什麼,在哪裏,你將會把javascript來隱藏在工具欄crm儀表板? –

+0

我已更新問題 – MaPi

回答

3

案例:沒有的iFrame

選擇元素

作爲jQuery選擇:與選定

var selected; 
selected = jQuery('#reportViewer_fixedTable'); 
… 
selected = jQuery('#reportViewer_fixedTable tbody'); 
… 
selected = jQuery('#reportViewer_fixedTable tr:nth-child(4)'); 

隱藏:

selected.css('display', 'none'); 

或現代的瀏覽器沒有的jQuery :

var selected; 
selected = document.querySelector('#reportViewer_fixedTable'); 
… 
selected = document.querySelector('#reportViewer_fixedTable tbody'); 
… 
selected = document.querySelector('#reportViewer_fixedTable tr:nth-child(4)'); 

和隱藏:

selected.style.display = 'none'; 

案例:在I幀

iframe的內容可以是有問題的,因爲它可能被沙盒或內容可能來自不同的域。這可能會導致XSS違規,在您的情況下,可能無法修復。

無論如何,在這裏我們去:

//Select the first iframe (which might not be the right one in your case); 
var elem = document.querySelector('iframe'); 

//And put it's body in a variable. We use the querySelector from the body 
//of the iframe. 
var ibody = elem.contentWindow.document.body; 

var table = ibody.querySelector('#reportViewer_fixedTable'); 
var tbody = ibody.querySelector('#reportViewer_fixedTable tbody'); 
var fourthtr = ibody.querySelector('#reportViewer_fixedTable tr:nth-child(4)'); 

table.style.display = 'none'; 
tbody.style.display = 'none'; 
fourthtr.style.display = 'none'; 
+0

我不會投票你的答案,但它是「錯誤的」。問題在於報告將在2011年的儀表板內執行。 –

+0

這不起作用。考慮到表格位於IFrame內,JS應該不同嗎? – MaPi

+0

user1648371:我添加了一個單獨的部分來解決Iframe中內容的問題。 –

0

我想你可以通過努力找到nth Chid

考慮使用此方法做到這一點:

HTML:

<!DOCTYPE html> 
<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 
</head> 
<body> 
    <table id="reportViewer_fixedTable" cellspacing="0" cellpadding="0" style="table-layout:fixed;width:100%;height:100%;"> 
    <tbody> 
     <tr style="background-color:#C4DDFF;"> <td>1</td> </tr> 
     <tr id="ParametersRowreportViewer" style="display:none;"><td>2</td> </tr> 
     <tr style="height:6px;font-size:2pt;display:none;"> <td>3</td> </tr> 
     <tr><td>FourthTR</td></tr> 
    </tbody> 
</table> 
</body> 
</html> 

個JS:

$(function(){ 
console.log($('#reportViewer_fixedTable tbody tr:nth-child(4) td:nth-child(1)').text()); 


    $('#reportViewer_fixedTable tbody tr:nth-child(4) td:nth-child(1)').addClass('FourthTR'); 
    $('.FourthTR').hide(); 
}); 

所以,我們試圖做的是,我們正在抓住表第四TR,然後我們抓住第四TR的第一個孩子。一旦完成,我們正在飛行中向其添加一個班級,說FourthTR,然後使用jQuery.hide()隱藏班級。瞧,你完成了。

查看工作示例:http://jsbin.com/ACam/1/edit。一如既往,請記住run with js

+0

我試過用它,但沒有結果。 – MaPi

+0

你確定,你已經在上面的問題中發佈了正確的HTML標記嗎?因爲我發現'tr's中缺少'td's。 –

+0

該代碼被Firefox的開發工具摺疊,但我複製了它的副本。正如我寫作另一個提案的答案時,代碼是否在IFrame中改變了需求? – MaPi

0

我不認爲你需要使用JavaScript這個

如果你有機會獲得ReportControl解決方案和ReportViewer.aspx.cs的服務器端代碼,您可以設置屬性

reportViewer.ShowToolBar = false 

在那個代碼中。

或者,如果你有機會獲得和可以修改瀏覽器的網頁標記(ReportViewer.aspx),你可以聲明其設置:通過添加ShowToolBar="false"到ReportViewer控件聲明:

<rsweb:ReportViewer ID="reportViewer" runat="server" ... ShowToolBar="false"> 
</rsweb:ReportViewer> 

如果這不是一個選項,您可以通過添加rc:Toolbar=false參數修改你傳遞託管的ReportViewer,iframe網址

http://localhost/ReportServer/Pages/ReportViewer.aspx?%2fMyReport%2fBEA&rs:Command=Render&rc:Toolbar=false 
+0

我無法使用前兩個選項。我認爲我們正在使用兩種不同版本的SSRS:我在運行報告時沒有任何ReportViewer.aspx頁面。我有一個Viewer.aspx。 – MaPi

+0

你可能是對的,但它可能是類似的東西 - 一個瀏覽器頁面應該有一個瀏覽器控制 - 它有類似於上面顯示的標記嗎?你可以發佈頁面標記,如果它不太長?另外,第三個選項呢 - 是否可以傳遞URL參數? –

+0

我已經嘗試過所有可能的參數,查看器根本無視它們。當我嘗試粘貼渲染的查看器代碼時,我有一個「長達59507個字符」的消息 – MaPi