2013-04-11 2 views
-5

Моя php-страница будет генерировать динамический html.Как создать динамический html, созданный PHP

Следующий выход;

<label class="required">suject *</label> 

К сожалению, я не могу редактировать HTML-

Теперь мне нужно, чтобы показать «*» в красном цвете.

Как я могу написать css для этого?

+0

вы не можете показать _только_ '*' в красном с помощью CSS. Http: // StackOverflow.com/questions/7165094/css-rule-to-target-text-between-2-tags – Ejaz

+0

как возможно, что вы можете редактировать php и css, но не html? –

+0

Если у вас есть доступ к JavaScript тоже, это не проблема. – 2013-04-11 10:20:01

ответ

4

Есть несколько способов сделать это:

Если у вас есть доступ к исходному коду PHP, то вы можете изменить выход соответственно, может быть Оберните * с <span> тегами и стилем соответственно.

Альтернатива, вы можете использовать JS, чтобы сделать то же самое:

$(document).ready(function() { 
    // Loop through all labels with required class 
    $('label.required').each(function() { 
     $(this).html($(this).html().replace(/\*/g, '<span class="asterisk">*</span>')); 
    }); 

}); 

И в вашем CSS, вы можете укладывать его в любом случае вы хотите:

.required .asterisk { 
    color: red; 
} 

См скрипку здесь - http://jsfiddle.net/teddyrised/JTesR/

Еще лучше: Использование CSS

Это написано в свете попыток быть как можно более семантически корректным - вы можете удалить символ * с помощью JS (или изменить код PHP), но использовать псевдокласс для добавления его обратно в элемент метки:

label.required:after { 
    content: '*'; 
    color: red; 
} 
+2

@Aldendar Он также не сказал, что сделал * НЕ * хотел использовать JS. Jeez. – Terry

+1

Он сказал как альтернативу, поэтому -1 немного суровый, у меня есть +1 соответственно. –

+3

@Allendar Вопрос в том, как он может это сделать. Я думаю, что это отличный ответ и гораздо более выгодный, чем все остальные, кто стреляет в -1's – spryce

2

CSS позволяет выбирать элементы (и ограниченное количество псевдоэлементов, таких как :first-line).

Невозможно выбрать «последний символ», «символы, соответствующие *» или что-нибудь еще, что сделало бы то, что вы хотите достичь.

Вы должны изменить DOM. Самый простой способ сделать это - изменить HTML, из которого он создан. Хакерным подходом было бы изменить его с помощью JavaScript после его загрузки.

0

Его невозможно с помощью CSS, но вы можете что-то сделать с помощью javascript. Если это содержимое генерируется при загрузке страницы, вы можете связать событие загрузки страницы, получить ссылку на этот элемент и внести изменения.

<script type='text/javascript'> 
document.onload = function (e) { 
    var col = document.getElementsByClassName("required"); 
    for (var i=0;i<col.length;i++) { 
    if (col[i].innerHTML == "subject *") { 
     col[i].innerHTML = "subject&nbsp;<span style='color:red'>*</span>"; 
    } 
    } 
} 
</script> 

Попробуйте вышеуказанное, мы надеемся, что оно решит вашу проблему. Я использовал простой javascript, но если вы знаете javascript-библиотеку (YUI, dojo, jquery), вы можете сделать это в 1 или 2 строке.

1

Это основано на ответе Терри: вы можете просто использовать :after для имитации эффекта и разместить этот контент по сгенерированному HTML.

label.required:after { 
    content: '*'; 
    color: red; 
    background:white; 
    position: relative; 
    left: -8px; 
} 

http://jsfiddle.net/x2KN7/

+0

Мне нравится взломать. Может возникнуть несоответствие с другим стилем, например, отталкивание содержимого непреднамеренно. +1 – 2013-04-11 10:35:38

+0

Чтобы избежать этого, OP может использовать ': nth-child()' или что-то еще, чтобы нацелить только одну метку. –

+0

Он может использовать абсолютное позиционирование, это просто идея. –

Смежные вопросы