2013-09-05 21 views
5

Có rất nhiều trình đánh dấu cú pháp trên mạng nhưng một cái gì đó tôi chưa thấy là một trong đó hỗ trợ làm nổi bật chuỗi truy vấn!Javascript hoặc cú pháp PHP làm nổi bật các chuỗi truy vấn?

Tôi đang tìm một cái gì đó để sử dụng khi ghi lại API của tôi và cũng là một API có rất nhiều chuỗi truy vấn liên quan. vì thế. JavaScript hay PHP tô sáng cú pháp nào có hỗ trợ chuỗi truy vấn?

tôi đã nhìn vào Google code prettify, highlight.js, prismjs và một vài người khác nhưng không ai trong số họ dường như có thể để làm nổi bật này:

/oauth/authorize?client_id=wG2X7q1qz74zdSbgiFkyL5JFOeloQwg2opfrPfaJ&response_type=code&redirect_uri=https%3A%2F%2Fmyapplication.com%2Foauth&scope=account%2Ccompetition%2Cvideos&state=d41d8cd98f00b204e9800998ecf8427e 

nào nên đánh dấu tất cả các phím trên một màu sắc, và tất cả các giá trị trong một với & = là một màu sắc khác nhau một lần nữa ... cái gì đó như: '?' enter image description here

+1

Damned câu hỏi hay. –

+1

... Tôi đã phải làm tài liệu giống nhau và không bao giờ nghĩ đến việc yêu cầu ... Thực ra, tại sao Chrome/Firefox không mã màu toàn bộ thanh địa chỉ? Tương tự, nhưng không phải cùng một yêu cầu: https://bug184074.bugzilla.mozilla.org/attachment.cgi?id=143118 –

Trả lời

1

như xa như tôi lo ngại tất cả các nhân vật như thế nào, '&' và '=' nên được thay thế trong nam es/các giá trị trong một URL thích hợp. Điều này làm cho nó siêu dễ dàng để phân tích cú pháp.

Vậy tại sao không phát minh ra một cái gì đó của riêng bạn:

function parseQuery(query){ 
    parsed = query.split('?'); 
    if (parsed.length > 1) { 
     parsed[1] = parsed[1].split('&'); 
     for(i in parsed[1]) { 
      parsed[1][i] = parsed[1][i].split('='); 
     } 
    } 
    retStr = '<span class="path">' + parsed[0] + '</span>'; 
    if (parsed.length > 1) { 
     retStr += '<span class="qm">?</span>'; 
     first = true; 
     for(i in parsed[1]) { 
      if (first) { 
       first = false; 
      } else { 
       retStr += '<span class="amp">&</span>'; 
      } 
      retStr += '<span class="name">' + parsed[1][i][0] + '</span>'; 
      if (parsed[1][i].length > 1) { 
       retStr += '<span class="eq">=</span>' + 
       '<span class="value">' + parsed[1][i][1] + '</span>'; 
      } 
      if (parsed[1][i].length > 2) { 
       for (var j = 2; j < parsed[1][i].length; j++) { 
         retStr += '<span class="eq">=</span>'; 
         retStr += '<span class="error">' + parsed[1][i][j] + '</span>'; 
       } 
      } 
     } 
    } 
    if (parsed.length > 2) { 
     for (var i = 2; i < parsed.length; i++) { 
       retStr += '<span class="qm">?</span>'; 
       retStr += '<span class="error">' + parsed[i] + '</span>'; 
     } 
    } 
    return retStr; 
} 

http://jsfiddle.net/YqrpV/1/

+0

Bạn sẽ thay đổi điều này như thế nào để hỗ trợ làm nổi bật trên nhiều dòng vì lý do định dạng? chẳng hạn như trong http://jsfiddle.net/YqrpV/2/ – Hailwood

+1

thay đổi b.innerHTML thành b.textContent khi nhận được và nó có vẻ hoạt động tốt ngay bây giờ. parseQuery hoạt động trên một chuỗi và innerHTML đã đi qua & http://jsfiddle.net/YqrpV/3/ – fsw

+0

Đôi tuyệt vời; Tôi đã thử innerText nhưng điều đó không làm việc không biết về textContent! – Hailwood

Các vấn đề liên quan