2012-11-07 42 views
1

我正在使用維基百科API獲取已提供關鍵字的文章的第一段。用普通的JavaScript編寫jQuery語句

我不得不從JSON響應中提取格式的文本,但抑制一些像側邊欄不需要的信息(這是在一個表&具有類名稱的信息框)之前,我給它一個div id爲維基 -

$.getJSON("http://en.wikipedia.org/w/api.php?" + 
      "action=mobileview&format=json&page=" + 
      keyword + "&redirect=no&sections=0&prop=text&" + 
      "sectionprop=toclevel%7Clevel%7Cline%7Cnumber" + 
      "%7Cindex%7Cfromtitle%7Canchor&callback=?", 
      function(json) { 
        $('#wiki').html(json.mobileview.sections[0].text) 
           .find("dl,sup,.thumb,table.infobox,table.metadata") 
           .remove().end(); 
      } 
); 

我從包含所需維基百科頁面的HTML代碼的JSON響應中刪除adapted the jQuery trick to remove tags/selectors。我想在使用HTML/JS編寫的Windows 8商店應用程序中使用上述代碼段。我希望將以下行轉換爲本機JavaScript,並實現不使用jQuery的選擇器刪除代碼 -

$('#wiki').html(json.mobileview.sections[0].text) 
      .find("dl,sup,.thumb,table.infobox,table.metadata") 
      .remove().end(); 

我是JavaScript的新手。任何人都可以請將此行轉換爲純粹的香草JavaScript?

回答

1
var wiki = document.querySelector('#wiki'); 
wiki.innerHTML = json.mobileview.sections[0].text; 

var content = wiki.querySelectorAll("dl,sup,.thumb,table.infobox,table.metadata"); 

for (var i = 0; i < content.length; i++) { 
    if (content[i].nodeName.toUpperCase() === "A") 
     content[i].parentNode.insertBefore(content[i].firstChild, content[i]); 

    content[i].parentNode.removeChild(content[i]); 
} 

這將適用於大多數瀏覽器,包括IE8和更高版本。

+0

謝謝!這非常有幫助。我也不需要在該內容中顯示超鏈接,但保留超鏈接文本。我在這裏看過一些示例 - http://stackoverflow.com/questions/4536329/whats-the-best-way-to-strip-out-only-the-anchor-html-tags-in-javascript-given但無法適應我的要求。如何通過擴展相同的代碼從內容中刪除錨標籤(但保留文本)? – mvp

+0

@mvp:假設錨只有文字和沒有嵌套的元素,你可以在我更新的答案中使用代碼。如果錨點不是當前DOM選擇的一部分,則在選擇器末尾添加',a',如果只想要具有'href'屬性的'',則可以添加'[href]'。 –