Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Заголовок bold в js таблице и форматирование


Автор: Guest 15.10.2005, 22:51
Доброе время суток!
Ищу инфу, как сделать заголовок bold в js таблице. А также, каким макаром сделать абзац в тексте таблицы - допустим, здесь:

Код

txt[1] = new fullArray("CONCEPT Privat", "CONCEPT", "Ein War unersättlich viel tausend Küssen");


чтобы выглядело

Ein War /абзац/ unersättlich viel tausend Küssen.

То есть я ищу аналоги html-евским тегам <p> и <li>.

Возможно, кто подскажет (или линк на подобную литературу в инете)
Спасибо.

Вот таблица.

Код

<html>
<head>
<title>Sortieren</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">



<script language="JavaScript" type="text/javascript">
<!--
var maxSize = 1;
var temp1, temp2, temp3, temp4, temp5, temp6 
var txt = new Array();



function fullArray(thema, abkuerzung, definition){
this.thema = thema;
this.abkuerzung = abkuerzung;
this.definition = definition;
}


txt[0] = new fullArray("Thema / Begriff", "Abkürzung", "Definition");
txt[1] = new fullArray("CONCEPT Privat", "CONCEPT", "Ein War unersättlich viel tausend Küssen");
txt[2] = new fullArray("EA PC", "EA PC", "Projekt Und mußt mit einem Kuß am Ende scheiden");
txt[3] = new fullArray("E-Posque", "EP", "EntNach herber Trennung tiefempfunden Leiden");
txt[4] = new fullArray("ESP", "ESP", "Enterprise War mir das Ufer , dem ich mich entrissen.");
txt[5] = new fullArray("ESS", "ESS", "Expert So lang ichs deutlich sah , ein Schatz der ");
txt[6] = new fullArray("Gesamtprivatlehre", "GPL", "EmpZuletzt im Blauen blieb ein Augenweiden");
txt[7] = new fullArray("IPPDDKK", "IPPDDKK", "Und endlich , als das Meer den Blick umgrenzte");
txt[8] = new fullArray("IPPDDKK News", "IPPDDKK News", "Ich suchte mein Verlornes gar verdrossen");



function createTable(){
var counter2 = 0;
var getIDs = document.getElementById("testremover"); 



if(!getIDs){
var getIDTest = document.getElementById("test");
var crtID = document.createElement("tbody");
crtID.id = "testremover";
getIDTest.appendChild(crtID); 
getIDs = document.getElementById("testremover");
} 



for(var counter=0; counter<=txt.length-1; counter++){ 
var crtTr = document.createElement("tr"); 

for(var count=0; count<=2; count++){ 


counter2++;
var crtTd = document.createElement("td"); 
if(counter2 == 1){
var crtTxtNd = document.createTextNode(txt[counter].thema);
} 
else if(counter2 == 2){
var crtTxtNd = document.createTextNode(txt[counter].abkuerzung);
}
else{
var crtTxtNd = document.createTextNode(txt[counter].definition);
counter2 = 0;
}
crtTd.appendChild(crtTxtNd);
crtTr.appendChild(crtTd);
getIDs.appendChild(crtTr);
}
}
}


// Z-A Thema/Begriff :) 

function sortByName(){ 
for(counter=1; counter < txt.length-1; counter++){
maxSize++
for(count=maxSize; count <= txt.length-1; count++){
for(var counts=0; counts <= 100; counts++){
if(txt[counter].thema.charCodeAt(counts) 
< txt[count].thema.charCodeAt(counts)){
temp1 = txt[counter].thema;
temp2 = txt[counter].abkuerzung;
temp3 = txt[counter].definition;
temp4 = txt[count].thema;
temp5 = txt[count].abkuerzung;
temp6 = txt[count].definition;
txt[count].thema = temp1;
txt[count].abkuerzung = temp2;
txt[count].definition = temp3;
txt[counter].thema = temp4;
txt[counter].abkuerzung = temp5;
txt[counter].definition = temp6;
break
}
else if(txt[counter].thema.charCodeAt(counts) 
== txt[count].thema.charCodeAt(counts)){
continue
}
else{
break
}
}
}
}
maxSize=1
createTable()
}

// Z-A Abkuerzung :) 

function sortByName(){ 
for(counter=1; counter < txt.length-1; counter++){
maxSize++
for(count=maxSize; count <= txt.length-1; count++){
for(var counts=0; counts <= 100; counts++){
if(txt[counter].abkuerzung.charCodeAt(counts) 
< txt[count].abkuerzung.charCodeAt(counts)){
temp1 = txt[counter].thema;
temp2 = txt[counter].definition;
temp3 = txt[counter].abkuerzung;
temp4 = txt[count].thema;
temp5 = txt[count].definition;
temp6 = txt[count].abkuerzung;
txt[count].thema = temp1;
txt[count].definition = temp2;
txt[count].abkuerzung = temp3;
txt[counter].thema = temp4;
txt[counter].definition = temp5;
txt[counter].abkuerzung = temp6;
break
}
else if(txt[counter].abkuerzung.charCodeAt(counts) 
== txt[count].abkuerzung.charCodeAt(counts)){
continue
}
else{
break
}
}
}
}
maxSize=1
createTable()
}


function allocator(){
var a = document.sorter.Selector.value
var GetRem = document.getElementById("test");
var cloneGetRem = document.getElementById("testremover");
GetRem.removeChild(cloneGetRem);


if(a == "Z-A"){
sortByName()
}
else if(a == "A-Z"){
sortByNameReverse()
}
}

// A-Z Thema/Begriff :) 

function sortByNameReverse(){ 
for(counter=1; counter < txt.length-1; counter++){
maxSize++
for(count=maxSize; count <= txt.length-1; count++){
for(var counts=0; counts <= 100; counts++){
if(txt[counter].thema.charCodeAt(counts) 
> txt[count].thema.charCodeAt(counts)){ 
temp1 = txt[counter].thema;
temp2 = txt[counter].abkuerzung;
temp3 = txt[counter].definition;
temp4 = txt[count].thema;
temp5 = txt[count].abkuerzung;
temp6 = txt[count].definition;
txt[count].thema = temp1;
txt[count].abkuerzung = temp2;
txt[count].definition = temp3;
txt[counter].thema = temp4;
txt[counter].abkuerzung = temp5;
txt[counter].definition = temp6;
break
}
else if(txt[counter].thema.charCodeAt(counts) 
== txt[count].thema.charCodeAt(counts)){
continue
}
else{
break
}
}
}
}
maxSize=1
createTable()
}


// A-Z Abkuerzung :) 

function sortByNameReverse(){ 
for(counter=1; counter < txt.length-1; counter++){
maxSize++
for(count=maxSize; count <= txt.length-1; count++){
for(var counts=0; counts <= 100; counts++){
if(txt[counter].abkuerzung.charCodeAt(counts) 
> txt[count].abkuerzung.charCodeAt(counts)){ 
temp1 = txt[counter].thema;
temp2 = txt[counter].abkuerzung;
temp3 = txt[counter].definition;
temp4 = txt[count].thema;
temp5 = txt[count].abkuerzung;
temp6 = txt[count].definition;
txt[count].thema = temp1;
txt[count].abkuerzung = temp2;
txt[count].definition = temp3;
txt[counter].thema = temp4;
txt[counter].abkuerzung = temp5;
txt[counter].definition = temp6;
break
}
else if(txt[counter].abkuerzung.charCodeAt(counts) 
== txt[count].abkuerzung.charCodeAt(counts)){
continue
}
else{
break
}
}
}
}
maxSize=1
createTable()
}

</script>
</head>
<body onLoad="createTable()">


<table width="80%" border="1" id="test">
<tbody id="testremover">
</tbody>
</table>

<form name="sorter">
Sortieren <select name="Selector">
<option value="Z-A">Thema / Begriff: Z-A
<option value="A-Z">Thema / Begriff: A-Z
<option value="Z-A">Abkürzung: Z-A
<option value="A-Z">Abkürzung: A-Z
</select>
<input type="button" value="OK" onClick="allocator()">
</form>

</body>
</html>

Автор: Aliance 16.10.2005, 12:37
1) Регистрируйтесь у нас
2) Используйте кнопку код
3) Прочтите Правила форума: http://forum.vingrad.ru/index.php?s=&act=SR&f=27
4) Постарайтесь сделать постановку вопроса понятной всем.

Автор: bagar 16.10.2005, 21:39
1. С удовольствием зарегистрировался.
2. Про кнопку - понял.
3. Правила читаны.
4. Сорри, если неточно/неверно сформулирована тема. Если я правильно понимаю, раздел называется "JavaScripts для начинающих", а начинающим в силу незнания вопроса даже вопрос правильно сформулировать бывает сложно.
Исправляю это досадное упущение.

Итак, вопрос. Нужно сделать в таблице, генерируемой из массива, заголовок bold, чтобы заголовок отличался от дальнейшей массы данных в таблице. Далее - в таблице существует текст, который внутри самой ячейки нужно разбить на абзацы.

Автор: Aliance 16.10.2005, 21:55
Просто генерируй такой кусок коды
Код

<th>заголовок таблицы<th>


Цитата(bagar @ 16.10.2005, 22:39)
который внутри самой ячейки нужно разбить на абзацы.

По какому признаку его нужно рабить? И почему бы не пользоваться обычными CSS?

Автор: bagar 17.10.2005, 08:52
В разметке html вставить <th> не выйдет, потому как в html размечается только <table> и <tbody>, а сам заголовок находится в массиве, и синтаксис JS требует того, что я не знаю.

Весь требуемых текст также находится в массиве, и я не знаю, применим ли тут CSS?

Автор: Zeroglif 17.10.2005, 14:10
Цитата(bagar @ 17.10.2005, 08:52)
В разметке html вставить <th> не выйдет, потому как в html размечается только <table> и <tbody>, а сам заголовок находится в массиве, и синтаксис JS требует того, что я не знаю.

В твоём коде создаются ячейки данных, с тем же успехом можно создавать ячейки заголовков. Для первой строки создаём th для остальных td (в примечании старый код):

Код

//var crtTd=document.createElement("td");
var crtTd=document.createElement((counter!=0)?"td":"th");


Что касается абзацев, то нужно понять саму логику разбиения на такие абзацы. Сейчас ты просто вставляешь в ячейку текстовую ноду, а надо теги, соответственно, стоит пересмотреть fullArray и добавить в него текст для абзацев и т.п. логику.

Автор: Sardar 17.10.2005, 15:16
bagar нужно понять что структура (что, разметка), стили (как, отображение) и скрипты это три разные вещи. Можешь генерить сколь угодно разных ячеек таблицы (вообще что угодно), а в стилях задать как она будет выглядеть. В браузере поддерживающим CCS2.1 можно вообще заставить таблицу с ячейками выглядеть как обычный "word'овский" документ.

К JS всё это имеет очень отдалённое отношение smile

Автор: bagar 17.10.2005, 21:57
Zeroglif, спасибо огромное, прежде всего за
Цитата
понять саму логику
, подобные замечания заметно продвигают в развитии и изучении конкретного предмета. В след раз буду думать с учетом того, что Вы сказали, и возможно, дело пойдет быстрее smile


Sardar, принцип построения документа и влияние на него стилей я понимаю. Но в данном случае меня особенно интересует именно то, что имеет отношение к JS, если в данном случае это вообще целесообразно.
Sardar, я поробую просто спросить, раз Вы так загадочно улыбаетесь. Либо JS генерирует таблицу и стиль можно пришить к этой виртуальной таблице (точнее все же к html), либо все эти абзацы можно задать в том же JS. Либо я нахожусь очень далеко от истины и существует еще третий вариант.

Автор: Zeroglif 18.10.2005, 01:36
Цитата(bagar @ 17.10.2005, 21:57)
Zeroglif, спасибо огромное, прежде всего за
Цитата
понять саму логику

, подобные замечания заметно продвигают в развитии и изучении конкретного предмета. В след раз буду думать с учетом того, что Вы сказали, и возможно, дело пойдет быстрее  smile

Не пойму, смайлик - это навроде маркёра сарказма? Зря. Под "понять логику" подразумевалось подойти к решению своей проблемы сразу правильно, и в этом же русле спросить. Можно сейчас 10 вариантов нарисовать с абзацами и проч., но я же не знаю, как рвать текст, и насколько это укладывается в решение твоей задачи по динамическому построению...

Автор: bagar 18.10.2005, 09:59
Zeroglif, ни в коем случае не сарказм. Я иронизирую над собой, над пробелами в своем образовании. Пресловутая фраза "понять саму логику" мне действительно кое-что подвинула в голове и имеет для меня определенную ценность. И если я так прямо об этом говорю, не воспринимайте это как иронию, пожалуйста.

Я понимаю, о чем Вы говорите "Можно сейчас 10 вариантов нарисовать..." Пытаюсь правильно сформулировать задачу, но боюсь, что моих знаний прдмета и даже терминологии на это не хватит. Ок, сидит дама в канцелярии, выдает мне тексты в вордовском документе, которые я преобразовываю в html, или как в данном случае, в сортируемую таблицу. В тексте этом в ячейке существует такое разбиение на подпункты:


Цитата
EntNach herber Trennung tiefempfunden Leiden War mir das Ufer , dem ich mich entrissen:
        - Und endlich , als das Meer den Blick umgrenzte Ich suchte mein Verlornes gar verdrossen
        - Ein War unersдttlich viel tausend Kьssen Projekt Und muЯt mit einem KuЯ am Ende scheiden


и вот в таком виде нужно иметь этот тест в таблице.

Сейчас он выглядит как
Код

txt[5] = new fullArray("ESS", "ESS", "EntNach herber Trennung tiefempfunden Leiden War mir das Ufer , dem ich mich entrissen: - Und endlich , als das Meer den Blick umgrenzte Ich suchte mein Verlornes gar verdrossen - Ein War unersдttlich viel tausend Kьssen Projekt Und muЯt mit einem KuЯ am Ende scheiden");

то есть все свалено в кучу. Поэтому я и задаюсь вопросом, при помощи каких средств эту ячейку привести в надлежащий вид.

Автор: Sardar 19.10.2005, 00:01
Цитата(bagar @ 17.10.2005, 20:57)
Либо JS генерирует таблицу и стиль можно пришить к этой виртуальной таблице (точнее все же к html), либо все эти абзацы можно задать в том же JS. Либо я нахожусь очень далеко от истины и существует еще третий вариант.

Не совсем третий. JS генерит разметку (и стили, но это сложней), для браузера нет разницы, было ли это написанно в вёрстке или это сгенерировал скрипт. Следовательно тебе нужно в ручную собрать таблицу так, как ты её хочешь видет и определить все стили.

Затем полученную вёрстку загоняем в скрипт, при этом не обязательно всё через createElement создавать, innerHTML во многих ситуациях проще и быстрей.

Сверстай таблицу так как хочешь её видеть, в обычном HTML. Закинь сюда, а мы поможем перенести генерацию кода на JS.

Автор: bagar 19.10.2005, 22:42
Наверное, целесообразней было бы ячейку дать, как она должна выглядеть. Иначе сверстаем таблицу, а потом опять сортировку делать (мне хватило впечатлений при создании сортировки в силу своей некомпетентности в JS).

Ячейка должна выглядеть так:
Цитата
EntNach herber Trennung tiefempfunden Leiden War mir das Ufer , dem ich mich entrissen:
        - Und endlich , als das Meer den Blick umgrenzte Ich suchte mein Verlornes gar verdrossen
        - Ein War unersдttlich viel tausend Kьssen Projekt Und muЯt mit einem KuЯ am Ende scheiden


Таблица в целом так:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<title>Thema / Begriff</title>
</head>


<table border=1 cellpadding=0 width="80%"

 <tr>
  <td>
<b> Thema / Begriff</b>
  </td>
  <td >
  <b>Abkuerzung</b>
  </td>
  <td>
  <b>Definition</b>
  </td>
 </tr>
 
 
 <tr>
  <td>
CONCEPT Privat
  </td>
  <td>
  CONCEPT
  </td>
  <td>
  Ein War unersuttlich viel tausend Kussen
  </td>
 </tr>
 
 
 <tr>
  <td>
  EA PC
  </td>
  <td>
  EA PC
  </td>
  <td>
  EntNachherber Trennung tiefempfunden Leiden War mir das Ufer , dem ich mich entrissen:<br>
  - Undendlich , als das Meer den Blick umgrenzte Ich suchte mein Verlornes gar
  verdrossen<br>
  - Ein War unersuttlich viel tausend Kussen Projekt Und must mit einem Kuss am Ende scheiden
  </td>
 </tr>
 
 
 <tr>
  <td>
 E-Posque
  </td>
  <td>
  EP
  </td>
  <td>
  EntNach herber Trennung tiefempfunden Leiden
  </td>
 </tr>
 
 
 <tr>
  <td>
 ESP
  </td>
  <td>
  ESP
  </td>
  <td>
  Enterprise War mir das Ufer , dem ich mich entrissen.<br>
  EmpZuletzt im Blauen blieb ein Augenweiden
  </td>
 </tr>
 
 
 <tr>
  <td>
  ESS
  </td>
  <td>
  ESS
  </td>
  <td>
 Expert So lang ichs deutlich sah , ein Schatz der 
  </td>
 </tr>
 
 
 <tr>
  <td>
 Gesamtprivatlehre
  </td>
  <td>
 GPL
  </td>
  <td>
EmpZuletzt im Blauen blieb ein Augenweiden
  </td>
 </tr>
 
 
 <tr>
  <td>
  IPPDDKK
  </td>
  <td>
IPPDDKK
  </td>
  <td>
Und endlich , als das Meer den Blick umgrenzte
  </td>
  
  
 </tr>
 <tr>
  <td>
IPPDDKK News
  </td>
  <td>
 >IPPDDKK News
  </td>
  <td>
Ich suchte mein Verlornes gar verdrossen
  </td>
 </tr>
</table>

</body>

</html>


Автор: Sardar 20.10.2005, 15:59
Попробуй разобраться с этим кодом, это не сложно smile

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Sorting</title>    
<style type="text/css">
#platf {
  border: 1px solid black;
}
#platf th {
  border-bottom: 1px solid #555555;
  cursor: pointer;
  font-family: Arial, sans-serif;
  color: #0a3d5c;
  font-weight: bold;
}
#platf td {
  border-bottom: 1px solid #eeeeee;
  font-family: Verdana;
  font-size: 12px;
  color: #113a0a;
}
</style>
<script type="text/javascript">
<!--

function Table(target) {
  this.target=target;
  target.jsAgent=this;
  this.rows=[];
  this.caption=null;
}
Table.prototype.createCaption=function() {
  this.caption=arguments;
}
Table.prototype.addRow=function() {
  this.rows[this.rows.length]=arguments;
}
Table.prototype.render=function(f) {
  //clear table
  var tb=this.target.tBodies;
  for(var i=0; i<tb.length; i++) this.target.removeChild(tb[i]);
  //set caption if needed
  if(this.caption&&this.target.getElementsByTagName('thead').length<1) {
    var th=document.createElement('thead');
    th.appendChild(createCaption(this.caption));
    this.target.appendChild(th);
  }
  //create content
  var tb=document.createElement('tbody');
  for(var i=0; i<this.rows.length; i++) tb.appendChild(createRow(this.rows[i]));
  this.target.appendChild(tb);
}
Table.prototype.sortByColumn=function(colnum, comparator) {
   if(typeof(comparator)!="function") {comp=function(a,b) { //дефолтовый компаратор
       if(typeof(a)=="string") a=a.toLowerCase();  //на случай если значения строки
       if(typeof(b)=="string") b=b.toLowerCase(); //не учитываем регистр
       return (a<b? -1: (a>b? 1: 0));   
   }} else comp=comparator; //либо заданный компаратор
   this.rows.sort(function(a, b) {
      return comp(a[colnum], b[colnum]);
   });
   this.render(true);
}

//============- Skin functions -===================
//задаём любую вёрстку для строк и заголовка
function createCaption(cells) {
  function comp() { //ставим сортировку по клику
    this.parentNode.parentNode.parentNode.jsAgent.sortByColumn(this.cellIndex);
  }
  var tr=document.createElement('tr');
  for(var i=0; i<cells.length; i++) {
    var td=document.createElement('th');
    td.innerHTML=cells[i];
    tr.appendChild(td);
    
    td.onclick=comp;
  }
  return tr;
}

function createRow(cells) {
  var tr=document.createElement('tr');
  for(var i=0; i<cells.length; i++) {
    var td=document.createElement('td');
    td.innerHTML=cells[i];
    tr.appendChild(td);
  }
  return tr;
}

function initTable() {
  var t=new Table(document.getElementById('platf'));
  t.createCaption("Thema / Begriff", "Abku\"rzung", "Definition");
  t.addRow("CONCEPT Privat", "CONCEPT", "Ein War unersa\"ttlich viel tausend Ku\"ssen");
  t.addRow("EA PC", "EA PC", "Projekt Und mu?t mit einem Ku? am Ende scheiden");
  t.addRow("E-Posque", "EP", "EntNach herber Trennung tiefempfunden Leiden");
  t.addRow("ESP", "ESP", "Enterprise War mir das Ufer , dem ich mich entrissen.");
  t.addRow("ESS", "ESS", "Expert So lang ichs deutlich sah , ein Schatz der ");
  t.addRow("Gesamtprivatlehre", "GPL", "EmpZuletzt im Blauen blieb ein Augenweiden");
  t.addRow("IPPDDKK", "IPPDDKK", "Und endlich , als das Meer den Blick umgrenzte");
  t.addRow("IPPDDKK News", "IPPDDKK News", "Ich suchte mein Verlornes gar verdrossen");
  t.render();
}
//-->
</script>
</head>

<body onload='initTable()'>
<table id="platf" cellspacing="0" cellpadding="5" width="100%">
 <colgroup><col width="20%"><col width="20%"><col width="60%"></colgroup>
 <tbody>
  <tr><td>Table loading...</td></tr>
 </tbody>
</table>

</body>
</html>

Замечаем что внешний вид задаёться стилями в head секции, в скриптах генерим структуру. Заметь как выполненна сортировка, помни что программисты ленивые люди, чем меньше кода - тем лучше. Кликай по заголовкам что бы увидеть эффект сортировки.

Автор: bagar 20.10.2005, 20:42
С кодом разобрались, и принцип совершенно понятен, спасибо.
Непонятно только, каким образом соеденить мой способ сортировки с указанием стиля.

И вопрос возникает: неужели было проще переделывать всю структуру скрипта, чем неким способом (вот тут я теряюсь, каким. Из-за этого и на форуме) отформатировать эту ячейку нужным образом?

Автор: Sardar 20.10.2005, 21:17
Цитата(bagar @ 20.10.2005, 19:42)
неужели было проще переделывать всю структуру скрипта, чем неким способом (вот тут я теряюсь, каким. Из-за этого и на форуме) отформатировать эту ячейку нужным образом?

Потратил 20 минут что бы написать скрипт и показать что форматирование и структура это две разные вещи! Такое ощущение что у тебя в уме есть некий блок, мешающий увидеть решение, т.к. ожидаешь ты его совсем в другом месте, скорее всего в виде методов makeItBold и подобных smile

Глянь на то что лежит между тегами <style>, почитай что есть CSS, посмотри какую разметку генерит мой скрипт(почти ничем не отличаеться от твоей), откинь все предубеждения, выпей чаю, свежим взглядом опять глянь на стили. Если не дошло... это серьёзно smile

Не какое то особое API, ни какая то особая вёрстка/структура, стили задают внешний вид! Теб даже код не особо менять нужно, напиши пару классов, задай ячейкам соотвествующие классы(ячейка.className=css_class) и наслаждайся результатом.

Автор: bagar 21.10.2005, 09:45
Йо! Sardar, хорошо сказал. В первом абзаце вообще в глаз попал, действительно, мои мысли крутятся на уровне "где тут кнопка Bold". smile Спасибо за направление, начну раскапывать дальше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)