Как установить css @media печать стилей с помощью jquery

У меня есть HTML - selectэлемент с idиз backgroundпредназначен для установки фонового изображения для <div class=a€?results-areaa€?>. Затем у меня есть кнопка печати для печати .results-areaсодержимого.

Проблема в том, что когда я хочу распечатать, .results-areaмне нужно установить, какое фоновое изображение установить при печати, если я использую CSS, @media printя не могу установить правила, фон которых он должен печатать (на основе выбора пользователя).

Есть ли другой способ сделать это?

HTML

<select id="background">
<option value="url(picture1.jpg)">picture1</option>
<option value="url(picture2.jpg)">picture2</option>
<option value="url(picture3.jpg)">picture3</option>
<option value="url(picture4.jpg)">picture4</option>
<option value="url(picture5.jpg)">picture5</option>
<option value="url(picture6.jpg)">picture6</option>
</select>

<div class=a€?results-areaa€?>
...
</div>

<a id="printMe" class="btn btn-warning">Print</a>

JQuery

$('#background').change(function () {
    $('.results-area').css("background-image", $(this).val());
})


$('#printMe').click(function () {
 print() 
});

CSS:

@media print {
          .results-area{
              background-image: ??????;
          }
    }

jquery,html,css,

3

Ответов: 3


1

Добавьте к себе <style>тег <head>и дайте ему идентификатор:

<head>
...
<style id="bg-for-print"></style>
...
</head>

Затем, когда вы хотите изменить фоновое изображение, выберите этот тег стиля и установите соответствующее фоновое изображение:

$("#bg-for-print").text(
    "@media print {" +
        ".results-area{" +
            "background-image: url(" + backgroundUrl + ");" +
        "}" +
    "}"
);

1 принят

Я решил, что это так.

HTML

Я изменил значения на цифры «1-2-3 ...» и добавил класс к каждой картине «abc ...»

<select id="background">
   <option class="a" value="1">Picture 1</option>
   <option class="b" value="2">Picture 2</option>
   <option class="c" value="3">Picture 3</option>
   <option class="d" value="4">Picture 4</option>
   <option class="e" value="5">Picture 5</option>
   <option class="f" value="6">Picture 6</option>
</select>

<div class=a€?results-areaa€?>
...
</div>

<a id="printMe" class="btn btn-warning">Print</a>

CSS

При этом @media printя указывал для каждого класса свои собственныеbackground-image

@media print {
   .a {
     background-image: url(image1.jpg) !important;
   }

   .b {
     background-image: url(image2.jpg) !important;
   }

   .c{
     background-image: url(image3.jpg) !important;
   }

   .d{
     background-image: url(image4.jpg) !important;
   }

   .e {
     background-image: url(image5.jpg) !important;
   }

   .f {
     background-image: url(image6.jpg) !important;
   }
}

JQuery

$('#background').change(function () {
    if ($(this).val() === "1") {
    $('.results-area').css("background-image", "url(image1.jpg)");
    replace();
    $('.results-area').addClass("a");
}
else if ($(this).val() === "2") {
    $('.results-area').css("background-image", "url(image2.jpg)");
    replace();
    $('.results-area').addClass("b");
}
else if ($(this).val() === "3") {
    $('.results-area').css("background-image", "url(image3.jpg)");
    replace();
    $('.results-area').addClass("c");
}
else if ($(this).val() === "4") {
    $('.results-area').css("background-image", "url(image4.jpg)");
    replace();
    $('.results-area').addClass("d");
}
else if ($(this).val() === "5") {
    $('.results-area').css("background-image", "url(image5.jpg)");
    replace();
    $('.results-area').addClass("e");
}
else if ($(this).val() === "6") {
    $('.results-area').css("background-image", "url(image6.jpg)");
    replace();
    $('.results-area').addClass("f");
}
else {
    replace();
}
});


function replace() {
    $('.results-area').removeClass("a b c d e f");
};

$('#printMe').click(function () {

        print()
});

Это похоже на сумасшедший способ сделать это, но это сработало.

Надеюсь, это сработает и для вас!


0

Установите фоновое изображение с помощью jquery и установите значение background-size:0;по умолчанию и background-size: inherit;в печатном носителе

$('select').on('change', function() {
        $('.results-area').css("background-image",'url(''+this.value+'')');
    });
$('#printMe').click(function () {
        window.print();
    });

        $('.results-area').css("background-image",'url(''+$('select')[0].value+'')');
.results-area{
  width:225px;
  height:225px;
  background-size: 0;
  border:solid 1px red;
}
 @media print {
          .results-area{
  background-size: inherit;
          }
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="selImage">
  <option value="https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTBoO6az8tPqavBo9xddKQynhqR8YSt4MUWTouGdFp7bWfxJiyW" selected>bg1</option>
  <option value="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSIo-K6XoQSaPZp_MP_TD4OeIdu229F4TCnZARtoiWvHJmI3iy8">bg2</option>
  
</select>
<input type="button" id="printMe" value="print"/>
<div class="results-area">
  </div>

JQuery, HTML, CSS,
Похожие вопросы